從左向右遍歷乙個陣列,通過不斷將其中的元素插入樹中可以逐步地生成一棵二叉搜尋樹。給定乙個由不同節點組成的二叉樹,輸出所有可能生成此樹的陣列。
示例:給定如下二叉樹
2/ \
1 3
返回:[
[2,1,3],
[2,3,1]
]不會做,後來看了題解
題目的意思是,按某種順序依次插入所有節點(不能插入已有樹的中間,只能插在最下層)。
所以對於根節點root來說,必須先插入root,root左節點left,右節點right。接下來要麼插入left,要麼插入right。再下一步可以插入left的左或右孩子或者right的左或右孩子。
用乙個雙端佇列儲存待選值,其中每個值都可以作為接下來插入的節點。每次用完該待選值後,放入到佇列尾部,從而模擬當前節點的不同選擇。
**:
/** * definition for a binary tree node.
* struct treenode
* }; */
class
solution };}
vector
cur;
vector
int>>res;
deque
que;
que.push_back(root);
dfs(que,res,cur);
return
res;
}void dfs(dequeque,vectorint>>& res,vector&cur)
int siz=que.size();
while(siz>0
)
if(p->right)
dfs(que,res,cur);
while
(child_cnt)
que.emplace_back(p);
cur.pop_back();
--siz;}}
};
二叉搜尋樹面試題總結
0.什麼是二叉搜尋樹 二叉搜尋樹就是左子樹所有結點都小於根結點,右子樹所有結點都打於根節點。當然這個定義遞迴的,它的左右子樹也滿足這個特點 例如 0.定義結構typedef int bstdatatype 定義二叉搜尋樹結點型別 typedef struct bstreenode bstreenod...
面試題 04 05 合法二叉搜尋樹
在二叉搜尋樹中 1.若任意結點的左子樹不空,則左子樹上所有結點的值均不大於它的根結點的值。2.若任意結點的右子樹不空,則右子樹上所有結點的值均不小於它的根結點的值。3.任意結點的左 右子樹也分別為二叉搜尋樹。definition for a binary tree node.struct treen...
面試題22 二叉搜尋樹的後序遍歷序列
分析 在後序遍歷得到的序列中,最後乙個數字是樹的根結點的值,陣列中前面的數字可分為兩個部分 第一部分是左子樹結點的值,它們都比根結點的值小,第二部分是右子樹結點的值,它們都比根結點的值大。include stdafx.h include using namespace std bool verify...