【Leetcode】【Medium】Construct Binary Tree from Inorder and Postorder Traversal
2024-08-28 16:07:53
Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
解题思路:
给出一个二叉树的中序和后序遍历结果,还原这个二叉树。
对于一个二叉树:
1
/ \
2 3
/ \ / \
4 5 6 7
后序遍历结果为:4 5 2 6 7 3 1
中序遍历结果为:4 2 5 1 6 3 7
由此可以发现规律:
1、后序遍历的最后一个字符,就是根结点(1)
2、发现根节点后,对应在中序遍历中的位置,则在中序遍历队列中,根节点左边的元素构成根的左子树,根的右边元素构成根的右子树;
3、递归的将左右子树也按照上述规律进行构造,最终还原二叉树。
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/ class Solution {
public:
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
return buildSubtree(postorder, inorder, ,
postorder.size()-,
, inorder.size()-);
} TreeNode* buildSubtree(vector<int>& postorder, vector<int>& inorder,
int p_left, int p_right, int i_left, int i_right) {
if (p_left > p_right || i_left > i_right)
return NULL; int root = postorder[p_right];
TreeNode* node = new TreeNode(postorder[p_right]); int range = ;
for (int j = i_left; j <= i_right; ++j) {
if (root == inorder[j]) {
range = j - i_left;
break;
}
} node->left = buildSubtree(postorder, inorder,
p_left, p_left + range - ,
i_left, i_left + range - );
node->right = buildSubtree(postorder, inorder,
p_left + range, p_right - ,
i_left + range + , i_right);
return node;
}
};
最新文章
- iOS-数据解析XML解析的多种平台介绍
- SSH服务器与Android通信(3)--Android客户端发送数据
- Python---MySQL相关操作
- webpack +vue开发(1)
- 使用HTML5的File实现base64和图片的互转
- Socurce Insight 快捷键
- 关于Linux系统basename函数缺陷的思考
- Ackerman函数
- C#(结构体_枚举类型)
- NSNumber 转 NSString
- 使用Docker官方的Django包【转】
- Java程序员们最常犯的10个错误(转)
- js--面向对象继承
- Spring JDBC 示例
- Nginx的反向代理与负载均衡
- Android初级教程对大量数据的做分页处理理论知识
- idea工具的快捷方式
- notepad++ 注释
- [简记] github 上的 GraphQL v4 API
- UVA11988-Broken Keyboard(数组模拟链表)
热门文章
- selenium 之Ran 0 tests in 0.000s
- linux 内存介绍
- Oracle 如何修改列的数据类型
- dfs.replication、dfs.replication.min/max及dfs.safemode.threshold.pct
- Linux将MySQL数据库目录挂载至新数据盘
- 更好的理解MVC
- 设置全局theme及读取theme方法
- 问题集录04--json和jsonp讲解
- Firebird Procedure 带返回的存储过程
- 致命id(就是一个神经病精神分裂的故事---但讲述方式真的很不错)