go 递归tree关系_【数据结构与算法】树的遍历(递归/非递归)-Go语言中文社区

仅做记录

树的前序、中序、后序、层次遍历(递归/非递归)

class TreeNode:

def __init__(self,x):

self.val = x

self.left = None

self.right = None

class Solution:

def initTree(self): # 构造树

m = TreeNode(0)

m1 = TreeNode(1)

m2 = TreeNode(2)

m.left = m1

m.right = m2

m3 = TreeNode(3)

m4 = TreeNode(4)

m1.left = m3

m1.right = m4

m5 = TreeNode(5)

m6 = TreeNode(6)

m2.left = m5

m2.right = m6

m7 = TreeNode(7)

m8 = TreeNode(8)

m3.left = m7

m3.right = m8

m9 = TreeNode(9)

m4.left = m9

return m

def layer(self, root): # 层次遍历

if not root:

return None

queue = [root]

while queue:

t = queue.pop(0)

print(t.val, end=" ")

if t.left:

queue.append(t.left)

if t.right:

queue.append(t.right)

def preOrder(self, root): # 先序遍历-递归

if not root:

return None

print(root.val, end=" ")

self.preOrder(root.left)

self.preOrder(root.right)

def preOederNo(self, root): # 先序遍历-非递归

if not root:

return None

# out = []

stack = []

while root or stack:

while root:

# out.append(root.val)

print(root.val, end=" ")

stack.append(root)

root = root.left

if stack:

t = stack.pop()

root = t.right

# return out

def midOrder(self, root): # 中序遍历-递归

if not root:

return None

self.midOrder(root.left)

print(root.val, end=" ")

self.midOrder(root.right)

def midOederNo(self, root): # 中序遍历-非递归

if not root:

return None

# out = []

stack = []

while root or stack:

while root:

stack.append(root)

root = root.left

if stack:

t = stack.pop()

# out.append(root.val)

print(t.val, end=" ")

root = t.right

# return out

def postOrder(self, root): # 后序遍历-递归

if not root:

return None

self.postOrder(root.left)

self.postOrder(root.right)

print(root.val, end=" ")

def postOederNo(self, root): # 后序遍历-非递归

if not root:

return None

out = []

stack = []

while root or stack:

while root:

out.append(root.val)

stack.append(root)

root = root.right

if stack:

t = stack.pop()

root = t.left

for i in out[::-1]:

print(i, end=" ")

if __name__ == '__main__':

t = Solution()

# 构造树

m = t.initTree()

print("层次遍历:", end=" ")

t.layer(m)

print("")

print("先序遍历(递归):", end=" ")

t.preOrder(m)

print("")

print("先序遍历(非递归):", end=" ")

t.preOederNo(m)

print("")

print("中序遍历(递归):", end=" ")

t.midOrder(m)

print("")

print("中序遍历(非递归):", end=" ")

t.midOederNo(m)

print("")

print("后序遍历(递归):", end=" ")

t.postOrder(m)

print("")

print("后序遍历(非递归):", end=" ")

t.postOederNo(m)

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值