博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#解leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal
阅读量:5813 次
发布时间:2019-06-18

本文共 1678 字,大约阅读时间需要 5 分钟。

Given inorder and postorder traversal of a tree, construct the binary tree.

Note:

You may assume that duplicates do not exist in the tree.

 

这个题目是给你一棵树的中序遍历和后序遍历,让你将这棵树表示出来。其中可以假设在树中没有重复的元素。

当做完这个题之后,建议去做做第105题,跟这道题类似。

 

分析:这个解法的基本思想是:我们有两个数组,分别是IN和POST.后序遍历暗示POSR[end](也就是POST数组的最后一个元素)是根节点。之后我们可以在IN中寻找POST[END].假设我们找到了IN[5].现在我们就能够知道IN[5]是根节点,然后IN[0]到IN[4]是左子树,IN[6]到最后是右子树。然后我们可以通过递归的方式处理这个数组。

代码如下,其中改代码击败了100%的C#提交者:

/** * Definition for a binary tree node. * public class TreeNode { *     public int val; *     public TreeNode left; *     public TreeNode right; *     public TreeNode(int x) { val = x; } * } */public class Solution {    public TreeNode BuildTree(int[] inorder, int[] postorder) {        return binaryTree(postorder.Length-1,0,inorder.Length-1,inorder,postorder);    }                    public TreeNode binaryTree(int postEnd,int inStart,int inEnd,int[] inorder, int[] postorder)    {        if(postEnd<0||inStart>inEnd)           return null;                        int inindex=0;        TreeNode root=new TreeNode(postorder[postEnd]);                for(int i=inStart;i<=inEnd;i++)        {            if(inorder[i]==postorder[postEnd])            {                inindex=i;                break;            }        }                        root.left=binaryTree(postEnd-(inEnd-inindex)-1,inStart,inindex-1,inorder,postorder);        root.right=binaryTree(postEnd-1,inindex+1,inEnd,inorder,postorder);                return root;            }}

最最关键的是确定函数的实参的时候,一定不能弄错。 

root.left=binaryTree(postEnd-(inEnd-inindex)-1,inStart,inindex-1,inorder,postorder);

中的inEnd-inindex代表了右子树的元素数,为了求得左子树的最后一位,应该将该元素减去。

转载于:https://www.cnblogs.com/xiaohua92/p/5308412.html

你可能感兴趣的文章
vrpie在Visio Studio 中无法调试的问题
查看>>
第六课:数据库的基本工具
查看>>
关于二叉树重构的思索
查看>>
$_SERVER['SCRIPT_FLENAME']与__FILE__
查看>>
skynet实践(8)-接入websocket
查看>>
系统版本判断
查看>>
My97DatePicker 日历插件
查看>>
0603 学术诚信与职业道德
查看>>
小点心家族第3位成员——楼层定位效果
查看>>
Knockout.Js官网学习(enable绑定、disable绑定)
查看>>
hive基本操作与应用
查看>>
excel快捷键设置
查看>>
poj3692
查看>>
python之信号量【Semaphore】
查看>>
html5纲要,细谈HTML 5新增的元素
查看>>
Android应用集成支付宝接口的简化
查看>>
[分享]Ubuntu12.04安装基础教程(图文)
查看>>
[Vim] 搜索模式(正则表达式)
查看>>
#HTTP协议学习# (二)基本认证
查看>>
Android开发之线性布局详解(布局权重)
查看>>