博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode C++ 105. Construct Binary Tree from Preorder and Inorder Traversal【Tree/分治】中等
阅读量:2005 次
发布时间:2019-04-28

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

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

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

For example, given

preorder = [3,9,20,15,7]inorder = [9,3,15,20,7]

Return the following binary tree:

3   / \  9  20    /  \   15   7

题意:根据一棵树的前序遍历与中序遍历构造二叉树。树中没有重复的元素。


思路

采取分治方法,递归解决这一问题。很简单的题目:

/** * 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
& preorder, vector
& inorder) {
return rebuild(0, preorder.size() - 1, 0, inorder.size() - 1, preorder, inorder); } TreeNode* rebuild(int leftpre, int rightpre, int leftin, int rightin, vector
&preorder, vector
&inorder) {
if (leftpre > rightpre || leftin > rightin) return nullptr; TreeNode *root = new TreeNode(preorder[leftpre]); int rootin = leftin; while (rootin <= rightin && inorder[rootin] != preorder[leftpre]) ++rootin; int leftsize = rootin - leftin; root->left = rebuild(leftpre + 1, leftpre + leftsize, leftin, rootin - 1, preorder, inorder); root->right = rebuild(leftpre + leftsize + 1, rightpre, rootin + 1, rightin, preorder, inorder); return root; }};

转载地址:http://llotf.baihongyu.com/

你可能感兴趣的文章
jenkins安装提示Please wait while Jenkins is getting ready to work...(Jenkins访问资源慢的问题)
查看>>
性能测试的必要性评估以及评估方法
查看>>
Spark学习——利用Mleap部署spark pipeline模型
查看>>
Oracle创建表,修改表(添加列、修改列、删除列、修改表的名称以及修改列名)
查看>>
使用redis实现订阅功能
查看>>
对称加密整个过程
查看>>
java内存模型
查看>>
volatile关键字
查看>>
tomcat_关闭
查看>>
Servlet_快速入门
查看>>
Servlet_生命周期方法
查看>>
Servlet_体系结构
查看>>
Servlet_urlpartten配置
查看>>
Request_原理
查看>>
Request_继承体系
查看>>
前端权限控制:获取用户信息接口构造数据
查看>>
有状态服务和无状态服务
查看>>
七牛云存储:断点续传
查看>>
字节流复制文本文件【应用】
查看>>
字节流复制图片
查看>>