深さ優先と幅優先探索木

木の深さ優先探索は、すなわち、三つの方法が含まれています。

  • 先行順走査(ルートについて)
  • トラバーサルINORDER(左と右ルート)
  • 後順(ルートについて)

主に根の位置を確認するためにこれらの3つのトラバーサルを区別

幅優先トラバースが主として使用されるキューであり、ノードが格納されると、データは、再帰的に、読み取ら

プログラムの具体的な実現の下を参照してください。

class TreeNode:
	def __init__(self, value):
		self.val = value
		self.left = None
		self.right = None

# 搜索二叉树的建立
def createTree(root, val):
	newnode = TreeNode(val)
	if root == None:
		root = newnode
		return root

	current = root
	while current != None:
		back = current
		if val < current.val:
			current = current.left
		else:
			current = current.right
	if val < back.val:
		back.left = newnode
	else:
		back.right = newnode
	return root

# 深度优先之中序遍历
def inorder(root):
	if root != None:
		inorder(root.left)
		print(root.val, end='\t')
		inorder(root.right)
		
# 前序遍历
def preorder(root):
	if root != None:
		print(root.val, end="\t")
		preorder(root.left)
		preorder(root.right)

# 后序遍历
def postOrder(root):
	if root != None:
		postOrder(root.left)
		postOrder(root.right)
		print(root.val, end="\t")
		
# 广度优先遍历
def bfs(root):
	nodes = [root]
	result = []
	while nodes:
		node = nodes.pop()
		result.append(node.val)
		if node.left != None:
			nodes.insert(0, node.left)
		if node.right != None:
			nodes.insert(0, node.right)
	print(result)




root = None
nodeval = [10, 5, 15, 4, 6, 12, 17]
for val in nodeval:
	root = createTree(root, val)
bfs(root)
inorder(root)

出力:

[10, 5, 15, 4, 6, 12, 17]
4	5	6	10	12	15	17
[Finished in 0.1s]
公開された33元の記事 ウォンの賞賛1 ビュー2590

おすすめ

転載: blog.csdn.net/orangerfun/article/details/105159108