ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

106从中序和后序遍历序列构造二叉树

2020-09-25 10:03:32  阅读:217  来源: 互联网

标签:遍历 后序 106 self 二叉树 inorder 节点 postorder


# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
from typing import List
# 首先我们需要明白,二叉树的前序遍历,中序遍历和后序遍历分别是什么。
# 前序遍历:根——左——右
# 中序遍历:左——根——右
# 后序遍历:左——右——根
# 因此我们可以看到这个案例
# 中序遍历 inorder = [9,3,15,20,7]
# 后序遍历 postorder = [9,15,7,20,3]
# 后序遍历的根节点一定是在最后,那我们可以根据后序遍历寻找到根节点,
# 然后根据根节点的值找到根节点在中序遍历中的位置,在中序遍历中根节点左边的是
# 左子树,右边是右子树,那么我们找到左右子树的长度,
# 而在后序遍历中,前边是左子树,中间是右子树,最后是根节点。
# 那么我们可以根据左子树和右子树的长度来继续进行遍历。
# ps:这里我们所说的前提都是在二叉树的所有节点都不重复的前提下。
class Solution:
def buildTree(self, inorder: List[int], postorder: List[int]) -> TreeNode:
return self.dfs(inorder,postorder)
def dfs(self,inorder,postorder):
# 这里如果列表为空,那么就返回None,代表着已经到了叶子节点。
if inorder == []:
return None
# 找到根节点。
val = postorder[-1]
# 找到根节点在中序遍历列表的位置
for i in range(len(inorder)):
if inorder[i] == val:
break
# 定义根节点。
root = TreeNode(val)
# 继续向下遍历,寻找左右子树。
root.left = self.dfs(inorder[:i],postorder[:i])
root.right = self.dfs(inorder[i+1:],postorder[i:len(postorder) - 1])
# 最后返回。
return root

标签:遍历,后序,106,self,二叉树,inorder,节点,postorder
来源: https://www.cnblogs.com/cong12586/p/13728397.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有