博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《剑指offer》重建二叉树
阅读量:5046 次
发布时间:2019-06-12

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

一、题目描述

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,则重建二叉树并返回。

二、输入描述

输入一个树的前序和中序,例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}

三、输出描述

根据输入的前序和中序,重建一个该二叉树,并返回该树的根节点。

四、牛客网提供的类框架

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    struct TreeNode* reConstructBinaryTree(vector
pre,vector
in) { }};

五、解题思路

前序遍历中的第一个节点是该数的根节点,根据该节点找出中序遍历中根节点所在的位置,把数分成左子树、右子树。

再对左子树、右子树进行递归求解。

六、代码

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    struct TreeNode* reConstructBinaryTree(vector
pre,vector
in) { vector
leftPre, leftIn, rightPre, rightIn; int len = in.size(); if(len == 0) return NULL; //根节点 TreeNode* root = new TreeNode(pre[0]); //找出在中序遍历中根节点所在的下标rootIndex(从该位置把左右两边分别分为左右两棵子树) int rootIndex; for(int i = 0; i < len; i++) { if(in[i] == pre[0]) { rootIndex = i; break; } } //根据上面求的rootIndex找出左子树的前序遍历和中序遍历 for(int i = 0; i < rootIndex; i++) { leftPre.push_back(pre[i+1]); leftIn.push_back(in[i]); } //根据上面求的rootIndex找出右子树的前序遍历和中序遍历 for(int i = rootIndex+1; i < len; i++) { rightPre.push_back(pre[i]); rightIn.push_back(in[i]); } //递归求左子树、右子树的建树 root->left = reConstructBinaryTree(leftPre, leftIn); root->right = reConstructBinaryTree(rightPre, rightIn); return root; }};

转载于:https://www.cnblogs.com/chenximcm/p/6285149.html

你可能感兴趣的文章
测试文档
查看>>
java 访问 kerberos 认证的 kafka
查看>>
Allowance POJ - 3040
查看>>
Android ----style
查看>>
第六课 抽象类与接口
查看>>
hdu5496 Beauty of Sequence
查看>>
PDF.NET(PWMIS数据开发框架)之SQL-MAP目标和规范
查看>>
ios 自定义tabbar
查看>>
Modbus教程
查看>>
Cheatsheet: 2012 08.01 ~ 08.16
查看>>
int 15h
查看>>
C#连接数据库_使用读取配置文件的方式
查看>>
Java-多线程总结
查看>>
简单动画原理
查看>>
Android窗口管理服务WindowManagerService计算窗口Z轴位置的过程分析
查看>>
VS2008安装失败!Microsoft Visual Studio Web 创作组件
查看>>
[kuangbin带你飞]专题七 线段树
查看>>
Ajax创建对象的方法
查看>>
提供多种类型IP数据业务的通信系统d 第三代移动通信系统
查看>>
476. 数字的补数python
查看>>