定義:二叉搜尋樹是二叉樹的一種,是應用非常廣泛的一種二叉樹,英文簡稱為 bst性質:
int size() // 元素的數量
boolean isempty() //是否為空
void clear() //清空所有元素
void add(e element) //新增元素
void remove(e element) //刪除元素
boolean contains(e element)//是否包含某元素
新增節點步驟:實現**:找到父節點parent
建立新節點
parent.left = node || parent.right = node
如果是相同值,覆蓋舊的值
//新增節點
public void add(e element)
//新增非第乙個節點
//找到父節點
nodeparent = root;
nodenode = root;
int cmp = 0;
while(node != null) else if (cmp < 0) else
}//新增到父節點的哪個位置
nodenewnode = new node(element, parent);
if(cmp > 0) else
size++;
}
元素之間的比較設計
允許外界傳入乙個comparator自定義比較方案
如果沒有傳入comparator,強制認為元素已經實現了compareable介面
**:
//comparator欄位
private comparatorcomparator;
//二叉搜尋樹的構造器
public binarysearchtree()
public binarysearchtree(comparatorcomparator)
/** * 節點值比較方法
* 返回值等於0,e1 == e2;
* 返回值大於0,e1大於e2;
* 返回值小於0,e1小於e2.
*/private int compare(e e1, e e2)
return ((comparable)e1).compareto(e2);
}
根據元素內容獲取節點//獲取元素對應的節點
private nodenode(e element) else
}return null;
}
刪除節點
情況有四種:
remove節點是葉子節點
直接刪除remove節點是度為1的節點若 node = node.parent.left;
則 node.parent.left = null;
若 node = node.parent.right;
則 node.parent.right = null;
若 node.parent = null;
則 node.parent.left = null;
用子節點替代原節點的位置remove節點是度為2的節點設child是node.left或者child是node.right
用child替代node的位置
用前驅或者後繼節點的值覆蓋原節點的值remove節點是根節點然後刪除相應的前驅或者後繼節點
注意:如果乙個節點的度為2,那它的前驅、後繼節點的度只可能是1 || 0
//移除節點
public void remove(e element)
private void remove(nodenode)
//刪除度為1或者為0的節點
nodereplacement = node.left != null ? node.left : node.right;
if (replacement != null) else if (node == node.parent.right) else
} else if (node.parent == null) else else
}}
二叉搜尋樹 二叉搜尋樹
題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...
二叉搜尋樹 修剪二叉搜尋樹
第一反應是重構,看來別人的解答發現,其實不用重構那麼複雜。treenode trimbst treenode root,int low,int high if root val high 下一層處理完左子樹的結果賦給root left,處理完右子樹的結果賦給root right。root left ...
樹 二叉樹 二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 13輸出 true 示例 2 輸入 5 14 3 6輸出 false 解釋 輸入為 ...