二叉查詢樹及遍歷演算法

2021-07-05 09:13:31 字數 1083 閱讀 8885

本文主要參考:

二叉查詢樹(binary search tree),又稱二叉搜尋樹、二叉排序樹。它符合這樣的特徵:

8    

/ \310

/ \\1

614/ \ /

4713

二叉查詢樹的搜尋、插入、刪除的時間複雜度等於o(h),期望o(logn),最壞o(n)

輸入乙個整數陣列,判斷該陣列是不是某二元查詢樹的後序遍歷的結果。 如果是返回 true,否則返回 false。

例如輸入 5、7、6、9、11、10、8,由於這一整數序列是如下樹的後序遍歷結果:

8 / \

610

/\ /\57

911因此返回 true。

如果輸入 7、4、6、5,沒有哪棵樹的後序遍歷的結果是這個序列,因此返回 false

做該題之前還必須得了解什麼是二叉查詢樹

最主要的性質就是左子樹的任何節點都小於根節點,右子樹的任何節點都大於根節點。

然後後序遍歷的最後一位肯定是根節點,所以,可以得到巧妙的方法為:

則該序列的最後一位a[n-1]必定是根節點,然後前面的序列中連續一部分是左子樹的遍歷,另一部份是右子樹的遍歷

此時需要在前面的序列中查詢第乙個大於root的節點a[i]

來個例子:後序遍歷5、7,6,9,11,10,8

第一次迭代:根節點為8 然後從左遍歷過來可以發現9為首個大於8的地方,那麼如果再9後面的都大於8的話就可以判斷9以及後面的為8的右子樹

此時成立,8的左子樹為5,7,6 右子樹為9,11,10

第二次迭代:

左子樹 6為根節點 同理7為6的右子樹,5為6的左子樹

右子樹 10為根節點 同理11為10的右子樹 9為11的左子樹

剩餘各個左右子樹的各個孩子節點都為空,迭代停止,該序列為後序遍歷

再來看7、4,6,5

其中5為根節點,7為第乙個大於5的節點,但是7之後的4小於5,所以7以及後面的數字不可能為5的右子樹,同時又不可能為左子樹,所以不成立

二叉查詢樹(BST)及二叉樹的遍歷

一 二叉查詢樹 bst 1 二叉查詢樹的特徵 二叉查詢樹 bst 也稱為二叉搜尋樹或二叉排序樹。二叉查詢樹的節點包含鍵值key。二叉查詢樹或者是一棵空樹,否則要求 若它的左子樹不為空,那麼左子樹上所有節點的key都小於根節點的key。若它的右子樹不為空,那麼右子樹上所有節點的key都大於根節點的ke...

二叉樹遍歷查詢

1 前序遍歷 先輸出父節點,再遍歷左子樹和右子樹 2 中序遍歷 先遍歷左子樹,再輸出父節點,再遍歷右子樹 3 後序遍歷 先遍歷左子樹,再遍歷右子樹,最後輸出父節點 4 小結 看輸出父節點的順序,就確定是前序,中序還是後序 package com.atguigu.tree public class b...

C 二叉查詢樹遍歷

佇列模板實現 二叉查詢樹實現 按照根結點的遍歷順序劃分 1.前序遍歷 根 左 右 2.中序遍歷 左 根 又 3.後序遍歷 左 右 根 前序遍歷 e,b,a,d,c,g,f,h 中序遍歷 a,b,c,d,e,f,g,h 後序遍歷 a,c,d,b,f,h,g,e 獲取整個樹中所有的鍵 void pree...