面試題24 陣列是不是二叉搜尋樹的後序優先遍歷

2021-06-25 15:18:34 字數 1197 閱讀 6690

分析:在後序遍歷得到的序列中,最後乙個數字是樹的根結點的值,陣列中前面的數字可分為兩個部分:第一部分是左子樹結點的值,它們都比根結點的值小,第二部分是右子樹結點的值,它們都比根結點的值大。

**:

[cpp]view plain

copy

#include "stdafx.h"

#include 

using

namespace

std;  

bool

verifysequenceofbst(

intnsequence, 

intnlength)  

intnroot = nsequence[nlength - 1];  

intnindex = 0;  

while

(nsequence[nindex] 

//左子樹中結點的值小於根節點的值

for(int

i=nindex+1; i//右子樹中結點的值大於根節點的值

}  bool

bleft = 

true

;  if

(nindex > 0)  

bool

bright = 

true

;  if

((nindex + 1) 

return

(bleft && bright);    

}  int

_tmain(

intargc, _tchar* argv)  

;//正確序列,有左右子樹

cout <

intnarr2[4] = ;

//錯誤序列

cout <

intnarr3[3] = ;

//右單支

cout <

intnarr4[3] = ;

//左單支

cout <

intnarr5[1] = ;

//單個結點

cout <

system("pause"

);  

return

0;  

}  

二叉搜尋樹面試題總結

0.什麼是二叉搜尋樹 二叉搜尋樹就是左子樹所有結點都小於根結點,右子樹所有結點都打於根節點。當然這個定義遞迴的,它的左右子樹也滿足這個特點 例如 0.定義結構typedef int bstdatatype 定義二叉搜尋樹結點型別 typedef struct bstreenode bstreenod...

面試題24 二叉搜尋樹與雙向鍊錶

分析 1.二叉樹中,每個結點都有兩個指向子結點的指標。2.在雙向鍊錶中,每個結點也有兩個指標,分別指向前乙個結點和後乙個結點 3.二叉搜尋樹中,左子結點的值總是小於父結點的值,右子結點的值總是大於父結點的值。4.將二叉搜尋樹轉換為雙向鍊錶時,原先指向左子結點的指標調整為鍊錶中指向前乙個結點的指標,原...

面試題24二叉搜尋樹的後序遍歷序列

面試題24 二叉搜尋樹的後序遍歷序列 1.輸入乙個整數的陣列,判斷該陣列是不是某棵二叉搜尋樹的後序遍歷序列。假設輸入的陣列的任意兩個數字互不相同。分析 例如輸入陣列,則返回true,因為這個序列可以找到這樣的一棵二叉搜尋樹滿足條件,而對於序列則找不到這樣的二叉搜尋樹。二叉搜尋樹的性質是,左子樹的節點...