面試題 04 09 二叉搜尋樹序列

2022-05-08 21:48:08 字數 1025 閱讀 4460

從左向右遍歷乙個陣列,通過不斷將其中的元素插入樹中可以逐步地生成一棵二叉搜尋樹。給定乙個由不同節點組成的二叉樹,輸出所有可能生成此樹的陣列。

示例:給定如下二叉樹

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...