1、二叉树
几种遍历方式,说实话,每个半年,我就忘记了,头疼!
2、X序遍历(自己瞎编的记忆方法:看根的位置)
- 前序遍历(根在前,每个人都有根,就是你的父亲,爷爷,爷爷的爷爷·······)
看你的祖先在哪里,你的祖先是你的领路人,没你祖先,就没有你,这样去记忆吧
X ---- 左 ------ 右
- 中序遍历
左 ---- X ------ 右
- 后序遍历
左 ---- 右 ------ X
- 层序遍历 (这个比较通俗易懂,一层一层来遍历,从老大<根>开始)
你在家里打扫鞋柜卫生,从最上面开始扫,从左往右扫(你是反撇子当我没说过)
3、算法实现
自己脑子先知道上面的几种遍历方式,才能开启算法思路。
- 中序遍历
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
inorder(root, list);
return list;
}
public void inorder(TreeNode root,List<Integer> list) {
if (root == null) {
return;
}
inorder(root.left,list);
list.add(root.val);
inorder(root.right,list);
}
}
二、真二叉树、满二叉树、完全二叉树
三、完全二叉树公式总结
一颗完全二叉树有n个节点,求叶子节点的个数
公式:
叶子节点个数 = floor((n + 1) / 2) (floor : 地板的意思,向下取整)
非叶子节点个数 = floor(n / 2)