本文介绍二叉树的基本概念以及使用Python实现二叉树的基本功能,包括遍历、计算深度、查找节点等。
二叉树的实现
1 | class Node: |
二叉树的遍历
1 | def preTraverse(root): |
1 | root = Node('D',Node('B',Node('A'),Node('C')),Node('E',right=Node('G',Node('F')))) |
1 | preTraverse(root) |
D
B
A
C
E
G
F
1 | midTraverse(root) |
A
B
C
D
E
F
G
1 | afterTraverse(root) |
A
C
B
F
G
E
D
根据前序遍历和中序遍历构建二叉树
1 | def constructTree(preorder, midorder): |
1 | preorder = [1, 2, 4, 7, 3, 5, 6, 8] |
1
2 3
4
7
5
二叉树的深度
1 | def treeDepth(tree): |
1 | treeDepth(root) |
4
二叉树查找
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
如果这个结点有右子树,而右子树上有左结点,则一直沿着右子树的左结点出发寻找最左的左结点就是该结点的下一个结点,若右子树上没有左结点则该节点的下一个结点是这个右子树的根结点。
如果这个结点没有右子树,而该结点是其父结点的左结点,则该结点的下一个结点就是其父结点。
若该节点也不是其父结点的左结点,则一直向上寻找,知道找到其父结点是父结点的父结点的左结点,则该父结点的父结点就是该结点的下一个结点。
1 | class TreeLinkNode: |
1 | def getNext(pNode): |