输入一颗树,打印“双樱桃”的个数。
程序员文章站
2022-03-05 15:27:30
...
一道面试题。
输入一颗树,打印“双樱桃”的个数。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
Map<Integer, TreeNode> map = new HashMap<>();//map来保存节点序号和节点之间的关系
for(int i = 0; i < n; i++){
int num1 = sc.nextInt();
String s = sc.next();
int num2 = sc.nextInt();
if(!map.containsKey(num1)){
map.put(num1, new TreeNode(num1));
}
if(!map.containsKey(num2)){
map.put(num2, new TreeNode(num2));
}
if(s.equals("left")){
map.get(num1).left = map.get(num2);
}else{
map.get(num1).right = map.get(num2);
}
}
TreeNode root = map.get(1);
Set<TreeNode> set = new HashSet<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);//层序遍历的方式遍历树的节点
while(!queue.isEmpty()){
int size = queue.size();
for(int i = 0; i < size; i++){
TreeNode node = queue.poll();
if(node.left == null && node.right == null){ //叶子节点
set.add(node);
}else{
if(node.left != null){
queue.add(node.left);
}
if(node.right != null){
queue.add(node.right);
}
}
}
}
int num = 0;
for(int numt : map.keySet()){
TreeNode node = map.get(numt);
if(set.contains(node.left) && set.contains(node.right)){
num ++;
}
}
System.out.println(num);
}
}
class TreeNode{//定义树的节点
int val;
TreeNode left;
TreeNode right;
public TreeNode(int val){
this.val = val;
this.left = null;
this.right = null;
}
}
上一篇: Maven的setting.xml和pom.xml的常用配置
下一篇: 数据结构随心复习笔记