數據結構_樹_二叉搜索樹
阿新 • • 發佈:2018-11-01
new 時間 sys else if 數據 深度 return set 中序
二叉搜索樹
二叉搜索樹(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); } }
5.刪除節點
數據結構_樹_二叉搜索樹