每天一个面经系列--面经15:二叉树相关编程(Java)

二叉树相关的编程题目普遍可以用递归和迭代的方法求解,这与它的数据结构息息相关。

目录

定义二叉树的数据结构

1.  求二叉树的最大深度

2.  求二叉树的最小深度

3.  求二叉树中节点的个数

4.  求二叉树中叶子节点的个数

5.  求二叉树中第k层节点的个数

6.  判断二叉树是否是平衡二叉树

7.  判断二叉树是否是完全二叉树

8.  两个二叉树是否完全相同

9.  两个二叉树是否互为镜像

10.  翻转二叉树or镜像二叉树

11.  求两个二叉树的最低公共祖先节点

12.  二叉树的前序遍历

13.  二叉树的中序遍历

14.  二叉树的后序遍历

15.  前序遍历和后序遍历构造二叉树

16.  在二叉树中插入节点

17.  输入一个二叉树和一个整数,打印出二叉树中节点值的和等于输入整数所有的路径

18.  二叉树的搜索区间

19.  二叉树的层次遍历

20.  二叉树内两个节点的最长距离

21.  不同的二叉树

22.  判断二叉树是否是合法的二叉查找树(BST)


定义二叉树的数据结构

class TreeNode {
    int val;
    //左孩子
    TreeNode left;
    //右孩子
    TreeNode right;
}

1.  求二叉树的最大深度

public int maxDepth(TreeNode node) {
    if (node == null)
        return 0;

    return Math.max(maxDepth(node.left), maxDepth(node.right)) + 1;
}

2.  求二叉树的最小深度

 

3.  求二叉树中节点的个数

public int numOfNodes(TreeNode node) {
    if (node == null)
        return 0;

    return numOfNodes(node.left) + numOfNodes(node.right) + 1;
}

4.  求二叉树中叶子节点的个数

public int numOfNoChildNodes(TreeNode node) {
    if (node == null)
        return 0;
    if (node.left == null && node.right == null)
        return 1;

    return numOfNoChildNodes(node.left) + numOfNoChildNodes(node.right);
}

5.  求二叉树中第k层节点的个数

 

6.  判断二叉树是否是平衡二叉树

 

7.  判断二叉树是否是完全二叉树

 

8.  两个二叉树是否完全相同

 

9.  两个二叉树是否互为镜像

 

10.  翻转二叉树or镜像二叉树

 

11.  求两个二叉树的最低公共祖先节点

 

12.  二叉树的前序遍历

 

13.  二叉树的中序遍历

 

14.  二叉树的后序遍历

 

15.  前序遍历和后序遍历构造二叉树

 

16.  在二叉树中插入节点

 

17.  输入一个二叉树和一个整数,打印出二叉树中节点值的和等于输入整数所有的路径

 

18.  二叉树的搜索区间

 

19.  二叉树的层次遍历

public ArrayList<ArrayList<Integer>> levelOrder(TreeNode node) {
    ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
    if (node == null)
        return result;
    Queue<TreeNode> queue = new LinkedList<TreeNode>();
    queue.offer(node);
    while (!queue.isEmpty()) {
        int size = queue.size();
        ArrayList<Integer> level = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            TreeNode treeNode = queue.poll();
            level.add(treeNode.val);
            if (treeNode.left != null)
                queue.offer(treeNode.left);
            if (treeNode.right != null)
                queue.offer(treeNode.right);
        }//for

        result.add(level);
    }//while

    return result;
}

20.  二叉树内两个节点的最长距离

 

21.  不同的二叉树

 

22.  判断二叉树是否是合法的二叉查找树(BST)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值