有关树
遍历方式
遍历的方式可以分为中序遍历、前序遍历、后序遍历的。三种方式主要以根节点与左子树以及右子树的关系决定
- 中序遍历:根节点遍历在左子树以及右子树之间
- 前序遍历:根节点遍历在左子树以及右子树之前
- 后续遍历:根节点遍历在左子树以及右子树之后
遍历伪代码
INORDER-TREE-WALK(x)
if x!=NULL:
INORDER-TREE-WALK(x.left)
print(x.key)
INORDER-TREE-WALK(x.right)
三种遍历方式代码实现
中序遍历
# 前序遍历 (递归法)
def preOrderTraverse(node):
if node is None:
return None
print(node.val)
preOrderTraverse(node.left)
preOrderTraverse(node.right)
[二叉树遍历] (https://www.cnblogs.com/icekx/p/9127569.html/)
二、二叉树的前驱和后继
定义
- 一个结点的后继,是大于x.key的最小关键字结点
- 一个解点的前驱,是小于x.key的最大关键字结点
对于前驱
满足两个条件:
- 小于当前的键值,那么只有只有只有在LP或者LS区找
- 要求是其中的最大值。而对于LP来说,X、LS、RS都是属于它的右子树,那么X、LS、RS都是大于它。
i.对于存在左子树的情况下,前驱=左子树中的最大值
ii.对于不存在左子树的情况,只有左子树的情况 前驱=左父母的值
iii.对于不存在左子树以及左父母的情况, 前驱=右父母的左父母(如果右父母不存在左父母,就一直网上遍历,直至出现左父母)