In: Computer Science
import java.util.Stack;
import java.util.ArrayList;
import java.util.Scanner;
class TreeNode{
int data;
ArrayList<TreeNode> children = new ArrayList<>();
TreeNode parent = null;
public TreeNode(int d){
data = d;
}
public TreeNode addChild(int d){
TreeNode n = new TreeNode(d);
n.setParent(this);
children.add(n);
return n;
}
public ArrayList<TreeNode> getChildren(){
return children;
}
public void setParent(TreeNode p){
parent = p;
}
public TreeNode getParent(){
return parent;
}
}
class Main {
public static void main(String[] args)
{
Scanner scan = new
Scanner(System.in);
int num;
//Create a tree
TreeNode root = new
TreeNode(scan.nextInt());
TreeNode node1 = root.addChild(scan.nextInt());
TreeNode node11 = node1.addChild(scan.nextInt());
TreeNode node12 = node1.addChild(scan.nextInt());
TreeNode node2 = root.addChild(scan.nextInt());
TreeNode node21 = node2.addChild(scan.nextInt());
TreeNode node22 = node2.addChild(scan.nextInt());
TreeNode node211 =
node21.addChild(scan.nextInt());
int newK = scan.nextInt();
System.out.println(""+largerK(root,
newK));
}
public static int largerK(TreeNode n, int k) {
//goal: Find the number of elements
greater than k in the tree rooted in n
//Example: if the elements in the
tree are: 10, 20, 30, 40, 50, and k=25, the method should return:
3
}
import java.util.Stack;
import java.util.ArrayList;
import java.util.Scanner;
class TreeNode{
int data;
ArrayList<TreeNode> children = new ArrayList<>();
TreeNode parent = null;
public TreeNode(int d){
data = d;
}
public TreeNode addChild(int d){
TreeNode n = new TreeNode(d);
n.setParent(this);
children.add(n);
return n;
}
public ArrayList<TreeNode> getChildren(){
return children;
}
public void setParent(TreeNode p){
parent = p;
}
public TreeNode getParent(){
return parent;
}
}
class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num;
//Create a tree
TreeNode root = new TreeNode(scan.nextInt());
TreeNode node1 = root.addChild(scan.nextInt());
TreeNode node11 = node1.addChild(scan.nextInt());
TreeNode node12 = node1.addChild(scan.nextInt());
TreeNode node2 = root.addChild(scan.nextInt());
TreeNode node21 = node2.addChild(scan.nextInt());
TreeNode node22 = node2.addChild(scan.nextInt());
TreeNode node211 = node21.addChild(scan.nextInt());
int newK = scan.nextInt();
int count=largerK(root,newK);
if(root.data>newK)//check if the root data is greater that k then increment count by 1
System.out.println("" + (count+1));
else System.out.println(""+ count);
}
public static int largerK(TreeNode n, int k) {
//goal: Find the number of elements greater than k in the tree rooted in n
//Example: if the elements in the tree are: 10, 20, 30, 40, 50, and k=25, the method should return: 3
int count=0;
ArrayList<TreeNode> children=n.getChildren();
//Traversing level wise and checking the values of children of node if it is greater than k and increment count
for(int i=0;i<children.size();i++){
if(children.get(i).data>k){
count++;
}
}
//Recursively calling same function for each child to get and find the values of nodes which are greater than k
for(int i=0;i<children.size();i++){
count+=largerK(children.get(i),k);
}
return count;
}
}