1.建立bst樹
/**
* 往bst樹中新增節點(公開的介面函式)
* @param node 需要新增到bst樹的那個節點
*/public void add(treenode node)else }
/*** 隱藏的函式,add方法的具體實現
* @param parent bst樹(或者子樹)的根節點
* @param child 要插入bst樹的節點
*/private void add(treenode parent,treenode child)else
parent.left = child;
}else if(child.value >= parent.value)else
parent.right = child;
}
}
注意:1.add方法具體實現中,新增乙個node的時候,有兩步判斷,乙個是跟父節點比較大小確定是放在左子樹還是右子樹,第二是判斷node是該父節點的直屬兒子還是其兒子的後代,即父節點左右子樹是不是為null,是的話node就做該父節點的兒子節點,否則交給其子樹遞迴處理,作為該父節點的孫子或者重孫。
2.bst樹搜尋
/**
* 在bst樹中搜尋指定元素,返回元素的position
* @param root bst樹(子樹)的根節點
* @param key 要查詢的元素
* @return key元素的位置,不存在就返回-1
*/public int searchbst(treenode root,int key)elseelse if(key
3.bst樹的深度優先遍歷【deep first search】
* 深度優先遍歷[中序遍歷left->center->right]
* 前中後遍歷的依據是看center是第幾個訪問的
* @param root 二叉樹的根節點
*/public void dsf(treenode root)else
}
4.廣度優先遍歷【breadth first search】
/**
* 廣度優先遍歷
* @param root 二叉樹的根節點
*/public void bsf(treenode root)
}
注意:
1.while裡面的兩個判斷是都要執行的,而不是選擇執行其中乙個。因為當前節點的左右子節點要一起輸出。
2.while裡面的輸出佇列元素的列印速度和元素入隊的速度不是同步的,依次迴圈可能新增多個元素入隊,但是輸出乙個元素出隊。有可能bst樹所有的元素都已經遍歷到佇列中了,還在利用while迴圈輸出
《資料結構與演算法 二叉查詢樹》
二叉查詢樹 binary search tree 也被稱作二叉搜尋樹。設x是二叉查詢樹中的任意乙個結點,則x的鍵值大於等於它的左子樹中任意乙個結點的鍵值,小於等於它的右子樹中任意乙個結點的鍵值。1 結點的前驅和後繼 結點的前驅 二叉樹中鍵值小於該結點的最大結點。結點的後繼 二叉樹中鍵值大於該結點的最...
資料結構與演算法 7 二叉查詢樹
一棵二叉查詢樹 bst 是一棵二叉樹,其中每個結點都含有乙個comparable的鍵 以及相關聯的值 且每個結點的鍵都大於其左子樹中的任意結點的鍵而小於右子樹的任意結點的鍵。和鍊錶一樣,我們巢狀定義了乙個私有類來表示二叉查詢樹上的乙個結點。每個結點都含有乙個鍵 乙個值 一條左鏈結 一條右鏈結和乙個結...
資料結構與演算法(2) 二叉查詢樹
1 右子樹所有節點關鍵字的值都要大於左子樹中的值 2 一般的情況 key left x key x key right 3 查詢操作最壞情況o n 平均情況o lg n 1 插入操作 struct node insert struct node root,struct node new 2 查詢某個...