目录
一. 另一颗树的子树
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);
}
}