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) {
//TODO: 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
}
}
The implementation of largerK() method within the given code is given below:
package temp;
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));
}
//Recursive implementation of largerK() method
public static int largerK(TreeNode n, int k) {
int v=0;
if(n.data > k)
v=1;
for(TreeNode tn : n.getChildren())
v += largerK(tn, k);
return v;
}
}
The sample output is given below: