python实现:二叉树根据先序和中序获取后序

https://www.cnblogs.com/double-t/p/11151461.html

默写了一下


# class Tree():
#     def __init__(self,x):
#         self.value=x
#         self.left=None
#         self.right=None

# class Solution():
#     def resolution(self,preorder,inorder):
#         if not preorder:
#             return None
#         root = Tree(preorder[0])
#         pos_root = inorder.index(preorder[0])
#         root.left=self.resolution(preorder[1:pos_root+1],inorder[0:pos_root])
#         root.right = self.resolution(preorder[pos_root+1:],inorder[pos_root+1:])
#         return root
#     def postTravel(self,root):
#         if root !=None:
#             self.postTravel(root.left)
#             self.postTravel(root.right)
#             print(root.value)
class Node():
    def __init__(self,x):
        self.v = x
        self.left = None
        self.right = None

def getTree(pre,tin):
    if not pre:
        return None
    root = Node(pre[0])
    rootIndexInTin = tin.index(pre[0])
    root.left = getTree(pre[1:1+rootIndexInTin],tin[:rootIndexInTin])
    root.right = getTree(pre[1+rootIndexInTin:],tin[rootIndexInTin+1:])
    return root

def postTrval(root):
    if not root:
        #print("空树")
        return None
    postTrval(root.left)
    postTrval(root.right)
    print(root.v," ")
    return "结束"

pre=[1,2,4,7,3,5,6,8]
tin=[4,7,2,1,5,3,8,6]

tree = getTree(pre,tin)
postTrval(tree)

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
二叉树先序中序后序遍历分别指的是:先访问根节点,然后遍历左子树和右子树;先遍历左子树,然后访问根节点,最后遍历右子树;先遍历左子树,然后遍历右子树,最后访问根节点。下面是Python实现二叉树先序中序后序遍历的代码: ```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right class BinaryTree: def __init__(self, root=None): self.root = root # 先序遍历 def preorderTraversal(self, node): if node: print(node.val, end=' ') # 先访问根节点 self.preorderTraversal(node.left) # 遍历左子树 self.preorderTraversal(node.right) # 遍历右子树 # 中序遍历 def inorderTraversal(self, node): if node: self.inorderTraversal(node.left) # 遍历左子树 print(node.val, end=' ') # 访问根节点 self.inorderTraversal(node.right) # 遍历右子树 # 后序遍历 def postorderTraversal(self, node): if node: self.postorderTraversal(node.left) # 遍历左子树 self.postorderTraversal(node.right) # 遍历右子树 print(node.val, end=' ') # 访问根节点 ``` 可以使用上述代码创建一个二叉树对象,并调用其中的三个方法进行遍历,例如: ```python # 创建二叉树 root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(3) root.left.left = TreeNode(4) root.left.right = TreeNode(5) tree = BinaryTree(root) # 先序遍历 print('先序遍历:', end='') tree.preorderTraversal(tree.root) print() # 中序遍历 print('中序遍历:', end='') tree.inorderTraversal(tree.root) print() # 后序遍历 print('后序遍历:', end='') tree.postorderTraversal(tree.root) print() ``` 输出结果为: ``` 先序遍历:1 2 4 5 3 中序遍历:4 2 5 1 3 后序遍历:4 5 2 3 1 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值