20 道题帮你一举拿下二叉树算法题(附源代码)
第一题:求二叉树中的节点个数
第二题:求二叉树的最大层数(最大深度)
第三题:先序遍历/前序遍历
第四题:中序遍历
第五题:后序遍历
第六题:分层遍历
第七题:求二叉树第K层的节点个数
第八题:求二叉树第K层的叶子节点个数
第九题:判断两棵二叉树是否结构相同
第十题:判断二叉树是不是平衡二叉树
第十一题: 求二叉树的镜像
第十二题:求二叉树中两个节点的最低公共祖先节点
第十三题:求二叉树的直径
第十四题:由前序遍历序列和中序遍历序列重建二叉树
第十五题: 判断二叉树是不是完全二叉树
第十六题:树的子结构
第十七题:二叉树中和为某一值的路径
第十八题:二叉树的下一个结点
第十九题:序列化二叉树
第二十题:二叉搜索树的第k个结点
第一题:求二叉树中的节点个数
递归解法:
(1)如果二叉树为空,节点个数为0
(2)如果不为空,二叉树节点个数 = 左子树节点个数 + 右子树节点个数 + 1
参考代码如下:
public static int getNodeNumRec(TreeNode root) { if (root == null) { return 0; } return getNodeNumRec(root.left) + getNodeNumRec(root.right) + 1; }
第二题:二叉树的最大层数(最大深度)
递归解法 :
(1)如果二叉树为空,二叉树的深度为0
(2)如果二叉树不为空,二叉树的深度 = max(左子树深度, 右子树深度) + 1
参考代码如下:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public int m