劍指offer 4 重建二叉樹

2021-09-05 19:26:08 字數 1732 閱讀 9553

重建二叉樹:

#include #include //重建二叉樹

using namespace std;

struct treenode

static void preorder(treenode *root)

cout << root->val;

preorder(root->left);

preorder(root->right);//遞迴前序列印

}static void inorder(treenode *root)

inorder(root->left);

cout << root->val;//遞迴中序列印

inorder(root->right);

}};class solution

int size = pre.size();

if (size == 0) //長度不能為空

int length = pre.size();

int value = pre[0]; //前序遍歷的第乙個節點是根節點

treenode *root = new treenode(value);

int rootindex = 0;

for (rootindex = 0; rootindex < length; rootindex++)

}if (rootindex >= length)

//確定左右子數的長度

int leftlength = rootindex;

int rightlength = length - 1 - rootindex;

vector preleft(leftlength), inleft(leftlength);

vector preright(rightlength), inright(rightlength);

for (int i = 0; i < length; i++)

else if ( i > rootindex)

}for (int i = 0; i < leftlength; i++)

cout << endl;

for (int i = 0; i < rightlength; i++)

cout << endl;

root->left = reconstructbinarytree(preleft, inleft);

root->right = reconstructbinarytree(preright, inright);//遞迴重建

return root;

}};int main()

; int in =;

vectorpreorder(pre, pre + 8);

vectorinorder (in ,in + 8);

solution solu;

treenode *root = solu.reconstructbinarytree(preorder, inorder);

cout << "preorder";

treenode::preorder(root);

cout << endl;

cout << "inorder";

treenode::inorder(root);

cout << endl;

//cout << "hello world!" << endl;

return 0;

}

劍指offer4 重建二叉樹

給出前序遍歷和中序遍歷,重新構建二叉樹.重建二叉樹主要就是遞迴,每一次新增乙個結點進入二叉樹,保證遞迴的順序和前序遍歷順序一致就ok了,多以左子樹的遞迴在前面,右子樹的遞迴放在後面,和前序遍歷的順序一致,第一次遞迴新增前序遍歷陣列中的第乙個,第二次遞迴新增的是前序遍歷陣列中的第二個.第n個就是陣列中...

劍指offer 4 重建二叉樹

題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。思路 中序序列中,節點左邊為左子樹,右邊為右子樹。前序第乙個為根節點 12 4 7 3 5 6 8 左 4 7 215 3...

劍指offer 4 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。演算法設計思想 前序遍歷序列的第乙個元素為根結點的值,然後在中序遍歷序列中尋找根節點的值的位置 索引 從中序遍歷序列的起始位置到根結...