重建二叉樹 根據先序序列與中序序列,重建二叉樹

2021-10-19 08:37:54 字數 1201 閱讀 9762

假設已知先序序列為pre1、pre2、······pren,中序序列為in1、in2、······inn,如圖所示:

解題思路:根據先序序列和中序序列找到根節點,根據根節點劃分左子樹和右子樹的數目,然後再次遞迴進行建立左子樹與右子樹的結點。(不管是左子樹還是右子樹都遵循遍歷的原則)

**實現

//先序序列區間wie[prel,prer],中序序列區間為[inl,inr]

node*

create

(int prel,

int prer,

int inl,

int inr)

node* root=

new node;

//新建乙個結點,用來存放當前二叉樹的根節點

root-

>data=pre[prel]

;//新建結點的資料域為根節點的值

int k;

for(k=inl;k<=inr;k++)}

int numleft=k-inl;

//左子樹的結點個數

//左子樹的先序序列區間為[prel+1,prel+numleft],中序序列區間為[inl,k-1]

//返回左子樹的根節點位址,賦值給root的左指標

root-

>lchild==

create

(prel+

1,prel+numleft,inl,k-1)

;//右子樹的先序序列區間為[prel+numleft+1,prer],中序序列區間為[k+1,inr]

//返回右子樹的根節點位址,賦值給root的右指標

root-

>rchild==

create

(prel+numleft+

1,prer,k+

1,inr)

;return root;

//返回根節點位址

}

玩轉二叉樹 根據中序和先序輸出層次遍歷序列

給定一棵二叉樹的中序遍歷和前序遍歷,請你先將樹做個鏡面反轉,再輸出反轉後的層序遍歷的序列。所謂鏡面反轉,是指將所有非葉結點的左右孩子對換。這裡假設鍵值都是互不相等的正整數。輸入第一行給出乙個正整數n 30 是二叉樹中結點的個數。第二行給出其中序遍歷序列。第三行給出其前序遍歷序列。數字間以空格分隔。在...

pat 還原二叉樹 根據後序中序輸出先序

還原二叉樹 25分 給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入首先給出正整數n le 50 為樹中結點總數。下面兩行先後給出先序和中序遍歷序列,均是長度為n的不包含重複英文本母 區別大小寫 的字串。輸出為乙個整數,即該二叉樹的高度。9 abdfghiec fdhgibe...

先序中序重建二叉樹

includeusing namespace std vectorpre,in int p typedef struct node vectorpost int rec int l,int r 通過前序和後序得到樹 int main for int i 0 i tem in.push back te...