二叉树

最常见的树即二叉树, 即每个结点最多只有两个子结点,分别为左子结点和右子结点。

二叉树的遍历

前序遍历:根结点 -> 左子树 -> 右子树
中序遍历:左子树 -> 根结点 -> 右子树
后序遍历:左子树 -> 右子树 -> 根结点

如何记忆?

  1. 前中后都是指的是根结点被访问的顺序,标杆是根结点。前 -> 根结点第一个被访问,中 -> 根结点第二个被访问,后-> 根结点最后被访问。
  2. 左子树总是在右子树之前。

Demo?
如下二叉树:
image.png
前序:
1 -> 2 -> 4 -> 5 -> 7 -> 8 -> 3 -> 6

中序:
4 -> 2 -> 7 -> 5 -> 8 -> 1 -> 3- > 6

后序:
4 -> 7 -> 8 -> 5 -> 2 -> 6 -> 3 -> 1

二叉树结点定义的代码

  1. public class TreeNode {
  2. int val; // 结点的值
  3. TreeNode left; // 左结点
  4. TreeNode right; // 右结点
  5. TreeNode() {} // 空构造函数
  6. // 只指定值的构造函数,例如只有一个结点的树
  7. TreeNode(int val) {
  8. this.val = val;
  9. }
  10. // 指定val, left, right的构造函数
  11. TreeNode(int val, TreeNode left, TreeNode right) {
  12. this.val = val;
  13. this.left = left;
  14. this.right = right;
  15. }
  16. }