Binary Tree 总结

本文介绍了二叉树的概念,包括全二叉树和完全二叉树。详细讨论了二叉树的存储方式,如链式存储和顺序存储,并讲解了二叉树的遍历方法,包括深度优先搜索(DFS)的前序、中序、后序遍历和广度优先搜索(BFS)。此外,还探讨了如何根据遍历来选择合适的方法,以及二叉搜索树的性质和操作,如插入、删除节点。最后,提到了递归在解决二叉树问题中的应用。
摘要由CSDN通过智能技术生成

Concepts

  • Full Binary Tree

    • depth: k
    • number of nodes: 2^k - 1
  • Complete Binary Tree

    • heap is a complete binary tree
  • Binary Search Tree

  • Balanced Binary Search Tree / AVL Tree

    • 左右两个子树的高度差的绝对值不超过1

Binary Tree 存储方式

  • 链式存储: Linked List
  • 顺序存储: 如果父节点的数组下标是 i,那么它的左孩子就是 i * 2 + 1,右孩子就是 i * 2 + 2

Binary Tree Code

public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode() {}
    TreeNode(int val) { this.val = val; }
    TreeNode(int val, TreeNode left, TreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}

Binary Tree Traversal

  • DFS
    • Preorder - recursion
    • Preorder - iteration Stack
      • 入栈顺序:中右左
    • Inorder - recursion
    • Inorder - iteration Stack 
      • 入栈顺序:左中右
      • 访问二叉树顶部的节点,然后一层一层向下访问,直到到达树左面的最底部,再开始处理节点中,和右
    • Postorder - recursion
    • Postorder - iteration Stack
      • 入栈顺序:中左右
      • stack结束后,最后reverse
  • BFS
    • use Queue - iteration

How to choose which order traversal?

  • 二叉树的构造:无论普通二叉树还是二叉搜索树一定前序,都是先构造中节点

    • invert BT, create BT from preorder/inorder/postorder, maximum BT, merge two BT

    • BST insert node, BST delete node, BST trim, convert sorted array to BST

  • 普通二叉树的属性:一般后序,通过递归函数的返回值做计算,比如求height;有时前序,比如求depth,比如为了方便让父节点指向子节点

    • 后序:BT Lowest Common Ancestor, BST Lowest Common Ancestor (这题顺序无所谓?), BT symmetric, BT max depth, BT min depth (这里两个depth其实是height), balanced BT, 404. sum of left leaves (必须三层约束条件,才能判断是否是左叶子)

    • 前序:257. BT paths (带有回溯;方便让父节点指向子节点), 112. Path Sum (带有回溯, 中要写在base case前)

    • 顺序无所谓:513. find bottom left tree value(没有中间节点的处理逻辑,只要左优先就行), 112. Path Sum

  • 二叉搜索树的属性: 中序,利用有序性

    • 538. Convert BST to Greater Tree

Recursion

  • 如果需要搜索整棵二叉树且不用处理递归返回值,递归函数就不要返回值 void。
    • e.g. 113. Path Sum ii
  • 如果需要搜索整棵二叉树且需要处理递归返回值,递归函数就需要返回值。

  • 如果要搜索其中一条符合条件的路径,那么递归一定需要返回值,因为遇到符合条件的路径了就要及时返回。
    • e.g. 112 Path Sum
    • e.g. 235. Binary Search Tree Lowest Common Ancestor

Binary Search Tree

  • 遇到binary search tree,就要想到Inorder traversal
  • 二叉搜索树是有序的。遇到在二叉搜索树上求什么最值啊,差值之类的,就把它想成在一个有序数组上求最值,求差值,这样就简单多了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值