4 重建二叉樹

2021-07-13 19:58:56 字數 3098 閱讀 1789

測試通過

時間限制:1秒

空間限制:32768k

題目描述

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。

時間限制:1秒空間限制:32768k

本題知識點: 查詢

[ 牛客網陣列題目鏈結 ]

#include

#include

using namespace std;

struct treenode

};//**********************方法二:自己寫的

struct treenode* reconstructbinarytree(vectorpre,vectorin)

root->val=*(pre.begin());

//查詢左子樹、右子樹元素個數

vector::iterator iter1=in.begin(),

iter2=in.end();

for( ; iter1!=iter2 && *iter1!=*(pre.begin()); iter1++)

prel.resize(numleft);

prel.assign(pre.begin()+1, pre.begin()+numleft+1);

inl.assign(in.begin(), in.begin()+numleft);

root->left=reconstructbinarytree(prel, inl);

prer.assign(pre.begin()+numleft+1, pre.end());

inr.assign(in.begin()+numleft+1, in.end());

root->right=reconstructbinarytree(prer, inr);

return root;

}else

return null;

}void printbt(treenode* bt) //先序輸出二叉樹

int main()

printf("輸入中序序列:");

for(int i=0; i>temp;

intest1.push_back(temp);

}for(int i=0; i"%d->",pretest1[i]);

}cout",intest1[i]);

}cout/2016/8/30更新

//建立過載函式

class solution

public:

struct treenode* reconstructbinarytree(vector

pre,vector

in)

};

struct treenode* reconstructbinarytree(vectorpre, vectorin)

else

if (j>i)

} root->left = reconstructbinarytree(pre_left, in_left);

root->right = reconstructbinarytree(pre_right, in_right);

return root;

}

/**

* definition for binary tree

* struct treenode

* };

*/class

solution

root->val=*(pre.begin());

//查詢左子樹、右子樹元素個數

vector::iterator iter1=in.begin(),

iter2=in.end();

for( ; iter1!=iter2 && *iter1!=*(pre.begin()); iter1++)

prel.resize(numleft);

prel.assign(pre.begin()+1, pre.begin()+numleft+1);

inl.assign(in.begin(), in.begin()+numleft);

root->left=reconstructbinarytree(prel, inl);

prer.assign(pre.begin()+numleft+1, pre.end());

inr.assign(in.begin()+numleft+1, in.end());

root->right=reconstructbinarytree(prer, inr);

return root;

}else

return null;}};

2016/8/30改進

避免了容器元素的複製,時間效率更高,空間節省。

/**

* definition for binary tree

* struct treenode

* };

*/class solution

struct treenode* reconstructbinarytreehelp(const

vector

&pre,int pos,const

vector

&in, int begin, int end)

int mid=begin; //查詢分界點

4 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。例如前序遍歷序列和中序遍歷序列為和,假設結果中無重複的數字。重建二叉樹並返回 1 前序遍歷二叉樹的形式為 根節點,左子樹,右子樹 中序遍歷二叉樹的形式為 左子樹,根節點,右子樹 因此我們需要把前序遍歷的第乙個結果new乙個treenode 出來...

4 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。先序序列第乙個數就是根結點而後是左子樹的先序序列和右子樹的先序序列,而中序序列是先是左子樹的中序序列,然後是根結點,最後是右子樹的中...

4 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。總結 1 主要就是考察三種遍歷的知識點,前序遍歷必然是中,左,右。中序遍歷左,中,右,所以就可以找到陣列當中那些是左 右子樹 2 然...