二叉树&排序二叉树

276 阅读1分钟

基础

  • 根节点
    • 左叶子节点
    • 右叶子节点
  • 树的高度
  • 子树
    • 完全子树
      • 根节点+左右叶子结点
    • 不完全子树
      • 根节点+左叶子节点
      • 跟节点+右叶子节点
  • 结论
    • 二叉树的任意一个子节点可以作为另一个子树的根节点
    • 可以基于根节点来区分不同的子树
  • 二叉树的定义和广度遍历
    • 广度遍历
    • 深度遍历:按照如下三种方式将二叉树的每一颗子树进行遍历即可
      • 前序:根左右
      • 中序:左根右
      • 后序:左右根
    image.png

前遍历: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)

排序二叉树