LeetCode Construct Binary Tree from Inorder and Postorder Traversal
2016-01-01 18:29
405 查看
Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
题意:已经二叉树的中序遍历和后序遍历,求二叉树的结构
思路:通过后序遍历中的最后一个元素,然后通过中序遍历知道左子树的包含元素和右子树的包含元素。根据左子树的中序遍历和后序遍历构造左子树,右子树的中序遍历和后序遍历构造右子树。
代码如下:
//二叉树的结构表示为
class TreeNode
{
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {val = x;}
}
class Solution
{
public TreeNode buildTree(int[] inorder, int[] postorder)
{
int len = postorder.length;
if (0 == len) return null;
TreeNode root = new TreeNode(postorder[len - 1]);
int index = 0;
for (int i = 0; i < inorder.length; i++)
{
if (inorder[i] == postorder[len - 1])
{
index = i;
break;
}
}
int[] leftinorder = new int[index];
int[] leftpostorder = new int[index];
int[] rightinorder = new int[len - index - 1];
int[] rightpostorder = new int[len - index - 1];
for (int i = 0; i < index; i++)
{
leftinorder[i] = inorder[i];
leftpostorder[i] = postorder[i];
}
for (int i = 0; i < len - index - 1; i++)
{
rightinorder[i] = inorder[index + 1 + i];
rightpostorder[i] = postorder[index + i];
}
root.left = buildTree(leftinorder, leftpostorder);
root.right = buildTree(rightinorder, rightpostorder);
return root;
}
}
Note:
You may assume that duplicates do not exist in the tree.
题意:已经二叉树的中序遍历和后序遍历,求二叉树的结构
思路:通过后序遍历中的最后一个元素,然后通过中序遍历知道左子树的包含元素和右子树的包含元素。根据左子树的中序遍历和后序遍历构造左子树,右子树的中序遍历和后序遍历构造右子树。
代码如下:
//二叉树的结构表示为
class TreeNode
{
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {val = x;}
}
class Solution
{
public TreeNode buildTree(int[] inorder, int[] postorder)
{
int len = postorder.length;
if (0 == len) return null;
TreeNode root = new TreeNode(postorder[len - 1]);
int index = 0;
for (int i = 0; i < inorder.length; i++)
{
if (inorder[i] == postorder[len - 1])
{
index = i;
break;
}
}
int[] leftinorder = new int[index];
int[] leftpostorder = new int[index];
int[] rightinorder = new int[len - index - 1];
int[] rightpostorder = new int[len - index - 1];
for (int i = 0; i < index; i++)
{
leftinorder[i] = inorder[i];
leftpostorder[i] = postorder[i];
}
for (int i = 0; i < len - index - 1; i++)
{
rightinorder[i] = inorder[index + 1 + i];
rightpostorder[i] = postorder[index + i];
}
root.left = buildTree(leftinorder, leftpostorder);
root.right = buildTree(rightinorder, rightpostorder);
return root;
}
}
相关文章推荐
- File类2
- File类1
- Atitit.attilax的 case list 项目经验 案例列表
- 项目记录14--框架年底总结和协议工具分享,UGUI图集管理
- sslsocket通信中的一些问题(JAVA)
- UltraEdit破解方法最强收录
- CSS选择器相关以及CSS选择器的优先级
- ssh搭建学习
- 使用phpMyAdmin时出现PHP 5.3+is required的解决方案
- JSP动作学习一
- Mac下好用的的C/C++IDE——Clion使用技巧
- win7下安装sqlServer2000
- LeetCode Construct Binary Tree from Preorder and Inorder Traversal(构造二叉树)
- java设计模式之适配器模式
- java中split()方法分割字符串后数组长度问题
- kafka学习之-雅虎开源管理工具Kafka Manager
- CenterOs 7 下Redis的安装和配置
- 自己写的触摸屏驱动
- HttpServletResponse说明
- Linux多线程实践(三)线程的基本属性设置API