[数据结构] 二叉树题目 (二)

发布于:2024-10-11 ⋅ 阅读:(8) ⋅ 点赞:(0)

目录

一. 另一颗树的子树

1.1 题目

1.2 示例

1.3 分析

1.4 解决

二. 平衡二叉树

2.1 题目

2.2 示例

2.3 分析

2.4 解决

三. 二叉树的遍历和创建

3.1 题目

3.2 示例

3.3 解决


一. 另一颗树的子树572. 另一棵树的子树 - 力扣(LeetCode)

1.1 题目

1.2 示例

1.3 分析

遍历root树, 找到与subRoot树起始节点数值相等的节点. 之后再判断以这个节点起始的子树是否与subRoot相同.

1.4 解决

 


二. 平衡二叉树110. 平衡二叉树 - 力扣(LeetCode)

2.1 题目

2.2 示例

2.3 分析

平衡二叉树: 每个节点的左右子树的高度差 <= 1.

前序遍历每个节点, 再分别求出每个节点左右子树的高度, 最后做差判断是否符合条件.

2.4 解决


三. 二叉树的遍历和创建二叉树遍历_牛客题霸_牛客网 (nowcoder.com)

3.1 题目

3.2 示例

3.3 解决

import java.util.Scanner;
class TreeNode {
    char ch;
    TreeNode left;
    TreeNode right;
    TreeNode(char ch) {
        this.ch = ch;
    }
}
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            String string = in.next();
            // System.out.println(string);
            // 创建二叉树
            TreeNode root = createTree(string);
            // 中序遍历
            inorderTree(root);
        }
    }
    public static int i = 0;
    public static TreeNode createTree(String string) {
        if (i == string.length()) return null;
        TreeNode root = null;
        if (string.charAt(i) == '#') {
            i++;
        } else {
            root = new TreeNode(string.charAt(i));
            i++;
            root.left = createTree(string);
            root.right = createTree(string);

        }
        return root;
    }
    public static void inorderTree(TreeNode root) {
        if (root == null) return;
        inorderTree(root.left);
        System.out.print(root.ch + " ");
        inorderTree(root.right);
    }
}