欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

输入一颗树,打印“双樱桃”的个数。

程序员文章站 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;
    }
}
相关标签: 数据结构和算法