對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 重建二叉樹
對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 ...
面試題7 重建二叉樹
一 題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建出圖2.6所示的二叉樹並輸出它的頭結點。二 關鍵 根據前序找根節點,從而在中序中找到左子樹對應的序列,右子樹對應的序列。三 解釋 四 i...
面試題7 重建二叉樹
面試題7 重建二叉樹 題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸 入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建出 圖所示的二叉樹並輸出它的頭結點。假裝有圖.jpg 1 2 3 4 5 6 7 8 在preorder inord...