劍指OFFER之重建二叉樹(九度OJ1385)

2021-09-06 15:43:05 字數 1316 閱讀 2933

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

輸入可能包含多個測試樣例,對於每個測試案例,

輸入的第一行為乙個整數n(1<=n<=1000):代表二叉樹的節點個數。

輸入的第二行包括n個整數(其中每個元素a的範圍為(1<=a<=1000)):代表二叉樹的前序遍歷序列。

輸入的第三行包括n個整數(其中每個元素a的範圍為(1<=a<=1000)):代表二叉樹的中序遍歷序列。

對應每個測試案例,輸出一行:

如果題目中所給的前序和中序遍歷序列能構成一棵二叉樹,則輸出n個整數,代表二叉樹的後序遍歷序列,每個元素後面都有空格。

如果題目中所給的前序和中序遍歷序列不能構成一棵二叉樹,則輸出」no」。

812

4735

6847

2153

8681

2473

5684

1275386

742

5863

1no

#include #include 

#include

int findroot(int *arr1,int begin1,int end1,int *arr2,int begin2,int end2,int *final);

int final[1000

];int flag = 999

;int main(void

) }

return0;

}int findroot(int *arr1,int begin1,int end1,int *arr2,int begin2,int end2,int *final)

for(i=begin1 ; i<=end1;i++)

}if(sum != (end1-begin1+1) && sum != (end2 - begin2+1

)) final[flag] =arr1[begin1];

flag--;

int numberofroot = -1

;

for(i=begin2 ; i<=end2 ; i++)

}if(numberofroot !=end2)

}if(numberofroot !=begin2)

}return1;

}

劍指Offer之重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。該題目用到了遞迴分治的思想。先序遍歷二叉樹的第乙個節點肯定是根節點,那麼在中序序列中找到先序的對應資料的下標。根據前序和中序遍歷的性...

劍指offer之重建二叉樹

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

劍指OFFER之重建二叉樹(九度OJ1385)

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並輸出它的後序遍歷序列。輸入可能包含多個測試樣例,對於每個測試案例,輸入的第一行為乙個整數n 1 n 1000 代表二叉樹的節點個數。輸入的...