劍指offer4 重建二叉樹

2021-07-08 13:46:52 字數 1376 閱讀 1915

給出前序遍歷和中序遍歷,重新構建二叉樹.

重建二叉樹主要就是遞迴,每一次新增乙個結點進入二叉樹,保證遞迴的順序和前序遍歷順序一致就ok了,多以左子樹的遞迴在前面,右子樹的遞迴放在後面,和前序遍歷的順序一致,第一次遞迴新增前序遍歷陣列中的第乙個,第二次遞迴新增的是前序遍歷陣列中的第二個......第n個就是陣列中的第n個.核心重點就是每一次只新增乙個結點,就是根據前序和中序確定的根結點,然後遞迴的時候輸入的就是左子樹的前序和中序,右子樹的前序和中序,建立兩個變數來記錄左右子樹的結點個數,lenr和lenl,這樣就能確定每次傳的引數正確.

#include "stack"

#include "queue"

#include "vector"

#include "iostream"

using namespace std;

struct treenode

};class solution

for(i = 0;i < lenl;i++)

node->left = reconstructbinarytree(prep,inp);

}if(lenr > 0)

return node;

}void printnode(treenode *root)

if(temp->right != null)

parentsize --;

if(parentsize == 0)

treenode *root;

solution test;

root = test.reconstructbinarytree(prev,inv);

test.printnode(root);

}

我喜歡的形式.

#include "stack"

#include "queue"

#include "vector"

#include "iostream"

using namespace std;

typedef struct node

~node()

}*bitree;

#define treelen 6

node* rebuild(char *preorder,char *inorder,int n)

if (lenr>0)

return node;

}void printnode(node *root)

if(temp->right != null)

parentsize --;

if(parentsize == 0)

{ parentsize = childsize;

childsize = 0;

cout<

劍指offer 4 重建二叉樹

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

劍指offer 4 重建二叉樹

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

劍指offer 4 重建二叉樹

重建二叉樹 include include 重建二叉樹 using namespace std struct treenode static void preorder treenode root cout root val preorder root left preorder root righ...