一、二叉树基本形态及性质
二叉树基本形态及性质
二叉树定义及性质及特殊二叉树
数据结构和算法之二叉树
一文搞懂面试中的二叉树
代码实现
- 二叉树包括深度遍历和广度遍历
- 深度遍历有三种形式:先序遍历(根,左,右)、中序遍历(左,根,右)、后序遍历(左,右,根)
深度遍历的实现
class TreeNode:
def __init__(self,value = None,left = None,right = None):
self.value = value
self.left = left # 左子树
self.right = right # 右子树
- 实例化一个TreeNode
node1 = TreeNode("A",
TreeNode("B",
TreeNode("D"),
TreeNode("E")
),
TreeNode("C",
TreeNode("F"),
TreeNode("G")
)
)
- 前序遍历
def preTraverse(root):
if root is None:
return
print(root.value)
preTraverse(root.left)
preTraverse(root.right)
- 中序遍历
def midTraverse(root):
if root is None:
return
midTraverse(root.left)
print(root.value)
midTraverse(root.right)
- 后序遍历
def afterTraverse(root):
if root is None:
return
afterTraverse(root.left)
afterTraverse(root.right)
print(root.value)
- 广度优先遍历即是层次遍历,按一层一层地遍历。
def levelOrder(root):
# write your code here
res = []
if root is None: # 如果根节点为空,则返回空列表
return res
# 模拟一个队列储存节点
q = []
q.append(root) # 首先将根节点入队
# 列表为空时,循环终止
while len(q) != 0:
length = len(q)
for i in range(length):
r = q.pop(0) # 将同层节点依次出队
if r.left is not None:
q.append(r.left) # 非空左孩子入队
if r.right is not None:
q.append(r.right) # 非空右孩子入队
res.append(r.value)
print(r.value)
return res