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

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

p62 输入前序和中序遍历的结果(不包含重复的数字),重建二叉树。

主要是分析两个序列的规律,然后用递归的方式找到每一个根节点,从而完成构建。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;class Node{public: Node(int a = 0, Node* b = nullptr, Node* c = nullptr) :value(a), left(b),right(c){} int value; Node* left,*right;};Node* createTree(vector
& Pre, vector
& Mid, int pStart, int pEnd, int mStart, int mEnd){ if (pStart < 0 || pEnd >= Pre.size() || mStart < 0 || mEnd >= Mid.size() || pStart > pEnd || mStart > mEnd) return nullptr; if (pEnd - pStart != mEnd - mStart) { cout << "Error : nums can't match " << endl; return nullptr; } int value = Pre[pStart]; Node* root = new Node(value); int pos = mStart; for (; pos <= mEnd; pos++) if (Mid[pos] == value) break; //判断是否存在错误 if (pos > mEnd) { cout << "Error : Cann't find the root " << endl; delete root; root = nullptr; return nullptr; } root->left = createTree(Pre, Mid, pStart + 1, pStart + pos - mStart, mStart, pos - 1); root->right = createTree(Pre, Mid, pStart + pos - mStart+1, pEnd, pos+1, mEnd); return root;}Node* solution(vector
& a, vector
& b){ return createTree(a, b, 0, a.size() - 1, 0, b.size() - 1);}void printTree(Node* root,int length=0){ if (root == nullptr) return; if (root->left != nullptr) printTree(root->left, length + 1); for (int i = 0; i < length; i++) cout << " "; cout << root->value << endl; if (root->right != nullptr) printTree(root->right, length + 1);}int main(int argc, char** args){ vector
a = { 1, 2, 4, 7, 3, 5, 6 ,8}; vector
b = { 4, 7, 2, 1, 5, 3, 8, 6 }; Node* root = solution(a, b); printTree(root); system("pause"); return 0;}

  

转载于:https://www.cnblogs.com/Oscar67/p/9579654.html

你可能感兴趣的文章
一月流水账
查看>>
判断字符串在字符串中
查看>>
Linux环境下Redis安装和常见问题的解决
查看>>
HashPump用法
查看>>
cuda基础
查看>>
Vue安装准备工作
查看>>
oracle 创建暂时表
查看>>
201421410014蒋佳奇
查看>>
Xcode5和ObjC新特性
查看>>
LibSVM for Python 使用
查看>>
Centos 7.0 安装Mono 3.4 和 Jexus 5.6
查看>>
CSS属性值currentColor
查看>>
java可重入锁reentrantlock
查看>>
浅谈卷积神经网络及matlab实现
查看>>
解决ajax请求cors跨域问题
查看>>
《收获,不止Oracle》pdf
查看>>
Real-Time Rendering 笔记
查看>>
如何理解HTML结构的语义化
查看>>
Activity之间的跳转:
查看>>
实验四2
查看>>