#二叉树的深度
题目描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
思路
- 递归的方法,简单说,就是左右节点分别遍历自己的左右子节点;
- 层次遍历,很麻烦的一种算法;你可以想想那么一个队列,扫到节点,就加进来,然后依次找他们的子节点,在加进来,最后肯定能够成功把全部节点都遍历到
代码
1234567static public int TreeDepth(TreeNode root) {if (root==null)return 0;int leftdepth = TreeDepth(root.left);int rightdepth = TreeDepth(root.right);return leftdepth>rightdepth?leftdepth+1:rightdepth+1;}
平衡二叉树
题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路
- 其实思路不是很难,就是这个递归麻烦,首先我们知道,你需要递归获得这个子树的深度,然后比较,但是我们比较所得到的这个flag怎么办?
- 算法的优化,后序遍历
- 其实思考起来很简单,书上写复杂了
代码
|
|
收获
- 递归的出口,设置一个类变量呗
- 二叉树的遍历
- 二叉树的层次遍历(非递归)
- 平衡二叉树就是一种二叉搜索树