根據前序遍歷判斷二叉搜尋樹

2021-07-11 02:19:04 字數 900 閱讀 7500

題意:給你乙個二叉樹的前序遍歷序列,讓你判斷是不是二叉搜尋樹(左子樹小於根,右子樹大於根)或其映象。如果是,輸出後序遍歷序列。

開始走了彎路,一直在思考如何建樹,結果試了很多種方法都不對,總是在乙個新節點該放在哪個節點下出問題。

其實這道題可以和給出前序中序寫後序這種題模擬,完全可以不建樹。根據前序遍歷的性質每次可以把根節點分離出來;根據二叉搜尋樹的性質每次可以把左右子樹分開;這樣在判斷的時候只判斷左邊的是不是都小於根,右邊的是不是都大於根就行了。至於後續序列,在遞迴左右之後,用b陣列儲存。

#include #include using namespace std;

int a[1003], n, k = 0, b[1003];

int check1(int l, int r)

if(check1(l + 1, i - 1) == 0)//遞迴地檢查左右子樹

return 0;

if(check1(i, r) == 0)

return 0;

b[k++] = a[l];//b儲存後序遍歷序列

return 1;

}int check2(int l, int r)

if(check2(l + 1, i - 1) == 0)

return 0;

if(check2(i, r) == 0)

return 0;

b[k++] = a[l];

return 1;

}int main()

if(a[1] > a[2])

else

printf("no\n");

} else

else

printf("no\n");

} return 0;

}

根據前序遍歷構建二叉樹

如何只有前序遍歷 帶空節點的 建立二叉樹 1.無法直接切割為左右子樹序列 2.在建立樹的過程中,會得到用掉了多少個節點 返回兩個值,建立好樹的根節點,用掉的個數,用乙個類包起來 public class solution9020 build tree rturn value private stat...

前序遍歷二叉樹

題目 給定乙個二叉樹,返回它的 前序 遍歷。示例 輸入 1,null,2,3 輸出 1,2,3 方法一 遞迴 這是最容易想到且最容易實現的演算法。definition for a binary tree node.struct treenode treenode int x val x left n...

根據前序遍歷和中序遍歷樹構造二叉樹

根據前序遍歷和中序遍歷樹構造二叉樹.樣例給出中序遍歷 1,2,3 和前序遍歷 2,1,3 返回如下的樹 2 1 3 假設樹中不存在相同數值的節點 definition of treenode class treenode class solution treenode helper vector p...