二叉树相关的编程题目普遍可以用递归和迭代的方法求解,这与它的数据结构息息相关。
目录
17. 输入一个二叉树和一个整数,打印出二叉树中节点值的和等于输入整数所有的路径
定义二叉树的数据结构
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)