基础
- 根节点
- 左叶子节点
- 右叶子节点
- 树的高度
- 子树
- 完全子树
- 根节点+左右叶子结点
- 不完全子树
- 根节点+左叶子节点
- 跟节点+右叶子节点
- 完全子树
- 结论
- 二叉树的任意一个子节点可以作为另一个子树的根节点
- 可以基于根节点来区分不同的子树
- 二叉树的定义和广度遍历
- 广度遍历
- 深度遍历:按照如下三种方式将二叉树的每一颗子树进行遍历即可
- 前序:根左右
- 中序:左根右
- 后序:左右根
前遍历:1 245 36
中遍历:425 1 63
后遍历:452 63 1
深度遍历的意义:
class Node():
def __init__(self,item):
self.item = item
self.left = None
self.right = None
class Tree():
def __init__(self):
self.root =None #如果树为非空则root只可以指向根节点
def addNode(self,item):
node = Node(item)
if self.root == None:
self.root = node
return
curl = self.root
nodeList = [curl]
while True:
pop_node = nodeList.pop(0)
if pop_node.left != None:
nodeList.append(pop_node.left)
else:
pop_node.left = node
break
if pop_node.right != Node:
nodeList.append(pop_node.right)
else:
pop_node.right = node
break
def travel(self):
cur = self.root
node_list = [cur]
while node_list:
pop_node = node_list.pop(0)
print(pop_node.item)
if pop_node.left != None:
node_list.append(pop_node.left)
if pop_node.right != Node:
node_list.append(pop_node.right)
tree = Tree() #构建一个空树
tree.addNode(1)
tree.addNode(2)
tree.addNode(3)
tree.addNode(4)
tree.addNode(5)
tree.addNode(6)
tree.addNode(7)
tree.addNode(8)
tree.travel()
def forward(self,root):
if root == None:
return
print(root.item)
self.forward(root.left)
self.forword(root.right)
def middle(self,root):
if root == None:
return
self.middle(root.left)
print(root.item)
self.middle(root.right)
def backward(self,root):
if root == None:
return
self.backward(root.left)
self.backward(root.right)
print(root.item)