面試題7 重建二叉樹

2021-08-21 11:37:36 字數 3645 閱讀 2964

對vector使用指標

#include #include #include using namespace std;

int main()

vector* seq[3] = ;

vector* curr = 0;

for (int j = 0; j < 3; j++)

getchar();}

struct treenode 

};struct listnode

};

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

刷第一遍

/**

* definition for binary tree

* struct treenode

* };

*/class solution

//s第乙個數,e最後乙個數

treenode* core(int* pres,int* pree,int* vins,int* vine)//bug1

else

}//求leftlength

//先找vinroot

int* vinroot = pres;

while(vinroot <= vine && vinroot->val != rootvalue)//這裡的二叉樹一定不含重複數字不然就不能這樣找vinroot了

++vinroot;

//③ 如果vin中沒有root,報錯

if(vinroot == vine && vinroot->val != rootvalue )

throw exception("wrong");

int leftlength = vinroot - pres;

//左子樹

root->left = core(pres + 1,pres + leftlength ,vins,vinroot - 1);

//右子樹

root->right = core(pres + leftlength + 1,pree,vinroor + 1,vine);

return root;

}};

1.

treenode* core(int* pres,int* pree,int* vins,int* vine)//bug1
error: cannot initialize a parameter of type'int *' with an rvalue of type 'vector*'

core(&pre,&pre+lenth-1,&vin,&vin+lenth-1);

修改為

treenode* core(vector* pres,vector* pree,vector* vins,vector* vine)
2.

int rootvalue = pres->val;//bug2
error: no member named 'val' in 'std::vector

'int rootvalue = pres->val;

vector* 是對 vector 的指標,下乙個是vector的下一位

刷第二遍

語言:c++

占用記憶體:612k

狀態:答案正確

/**

* definition for binary tree

* struct treenode

* };

*/class solution

//s第乙個數,e最後乙個數

treenode* core(int* pres,int* pree,int* vins,int* vine)

else

}//求leftlength

//先找vinroot

int* vinroot = vins;//bug1:int* vinroot = pres;

while(vinroot <= vine && *vinroot != rootvalue)//這裡的二叉樹一定不含重複數字不然就不能這樣找vinroot了

++vinroot;

//③ 如果vin中沒有root,報錯

if(vinroot == vine && *vinroot != rootvalue )

throw exception();

int leftlength = vinroot - vins;//bug2:int leftlength = vinroot - pres;

//左子樹

if(leftlength>0)//bug3忘了判斷遞迴條件,不判斷會記憶體超限

root->left = core(pres + 1,pres + leftlength ,vins,vinroot - 1);

//右子樹

if(pree-pres>leftlength)//bug3忘了判斷遞迴條件

root->right = core(pres + leftlength + 1,pree,vinroot + 1,vine);

return root;

}};

優秀**參考

public class solution 

private treenode reconstructbinarytree(int pre,int startpre,int endpre,int in,int startin,int endin)

return root;

}}

陣列的索引與指標的思想。

python

# -*- coding:utf-8 -*-

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class solution:

# 返回構造的treenode根節點

def reconstructbinarytree(self, pre, tin):

# write code here

if not pre or not tin:

return none

root = treenode(pre.pop(0))

index = tin.index(root.val)

root.left = self.reconstructbinarytree(pre, tin[:index])   //(pre[:index], tin[:index])       

root.right = self.reconstructbinarytree(pre, tin[index + 1:])//(pre[index:], tin[index+1:]) 

return root

python 切片[1:5] 輸出索引1~4

面試題7 重建二叉樹

一 題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建出圖2.6所示的二叉樹並輸出它的頭結點。二 關鍵 根據前序找根節點,從而在中序中找到左子樹對應的序列,右子樹對應的序列。三 解釋 四 i...

面試題7 重建二叉樹

面試題7 重建二叉樹 題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸 入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建出 圖所示的二叉樹並輸出它的頭結點。假裝有圖.jpg 1 2 3 4 5 6 7 8 在preorder inord...

面試題7 重建二叉樹

題目 重建二叉樹 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並輸出它的頭節點。二叉樹節點的定義如下 struct binarytreenode 分析前序遍歷序列的第乙個數字1就是根節...