二叉树


二叉树是一种很有用的表示层级关系的数据结构。形式上,一个二叉树要么是空的,要么是一个根节点r带着一个左二叉树和一个右二叉树。子树本身也是二叉树。左边的二叉树被称为根节点的左子树,右边二叉树被称为根节点的右子树。
图10.1给出了一个二叉树的图形表示。节点A是根节点。节点B和I分别是A的左右子节点。
二叉树的代码原型为:
template<typename T>
struct BinaryTreeNode {
T data;
unique_ptr<BinaryTreeNode<T>> left, right;
};


二叉树的一个关键计算就是遍历树中的所有节点。这里有一些完成这种访问的方法:
遍历左子树,访问根节点,然后再遍历右子树(中序遍历)。
图10.1的树的中序遍历是按照如下顺序访问节点的:{D, C, E, B, F, H, G, A, J, L, M, K, N, I, O, P}。
访问根节点,遍历左子树,然后再遍历右子树(前序遍历)。
图10.1的树的前序遍历是按照如下顺序访问节点的:{A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P}。
遍历左子树,遍历右子树,然后再访问根节点(后续遍历)。
图10.1的树的前序遍历是按照如下顺序访问节点的:{D, E, C, H, G, F, B, M, L, N, K, J, P, O, I, A}。


二叉树相关问题:
1. 测试一个二叉树是否为高度平衡的:

2. 测试一个二叉树是否是对称的:

3. 计算二叉树中两个节点的最低公共祖先:

4. 当节点有父节点指针时,计算LCA:

5. 计算二叉树中根节点到叶子结点之间路径的和:

6. 找到根节点到叶子结点之间的一个路径,满足路径的和为某一个给定值:

7. 不用递归的方法实现中序遍历:

8. 不用递归的方法实现前序遍历:

9. 找到中序遍历的第k个元素:

10. 计算后继:

11. 用O(1)的空间复杂度实现中序遍历:

12. 根据中序和前序遍历的数据重建一个二叉树:

13. 从前序遍历的数据和null标记中重建一个二叉树:

14. 用二叉树的叶子形成一个链表:

15. 计算一个二叉树的外沿:

16. 计算右侧的同胞树:

17. 实现二叉树的锁:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值