資料結構_樹_二叉搜尋樹
阿新 • • 發佈:2018-10-31
二叉搜尋樹
二叉搜尋樹(BST)又稱為二叉查詢樹、二叉排序樹。
1.特徵
二叉搜尋樹首先是一棵二叉樹;
對任意節點,如果其左子樹不為空,則左子樹上任意節點的值均不大於它的根節點的值;
如果其右子樹不為空,則右子樹上任意節點的值均不大於它的根節點的值;
任意節點的左右子樹也分別是二叉搜尋樹。
2.中序遍歷
中序遍歷二叉搜尋樹,得到的結果是有序的資料列。
// 中序遍歷二叉搜尋樹,結果是排好序的資料 public void midOrder(TreeNode node){ if(node == null){ return; } midOrder(node.getLeft()); System.out.print(node.getKey() + " "); midOrder(node.getRight()); }
3.新增節點
二叉搜尋樹新增的新節點總是成為葉子節點。
// 新增節點構造二叉搜尋樹 public TreeNode addNode(TreeNode node, int key){ // 如果不存在則建立節點,否則直接返回 if(node == null){ node = new TreeNode(key); } if(key < node.getKey()){ node.setLeft(addNode(node.getLeft(), key)); }else if(key > node.getKey()){ node.setRight(addNode(node.getRight(), key)); }else{ return node; } return node; }
4.查詢節點
需要遍歷二叉搜尋樹,時間複雜度取決於遍歷的深度。
// 查詢某個節點,時間複雜度為走過的層數,最壞為O(H) public TreeNode searchNode(TreeNode node, int key){ // 如果找不到返回null,找到則直接返回 if(node == null || node.getKey() == key){ return node; }else if(key < node.getKey()){ return searchNode(node.getLeft(), key); }else{ return searchNode(node.getRight(), key); } }