Tree 二叉搜尋樹

2021-08-29 13:14:55 字數 1487 閱讀 7034

每個節點最多兩個子節點,其中左邊節點的值小於該節點的值,右邊節點的值大於該節點的值。為了簡便起見,該二叉樹裝入的資料為整數,且不允許有重複的關鍵字值。

程式設計中為了簡便,採用了遞迴演算法,運算時會帶來額外的開銷,如果能將相應的演算法替換為迭代,則更為有效。刪除的演算法相應複雜一些,但也可以承受。

apiadd:將數加入樹

remove:從樹中刪除指定的節點

contains:樹中是否包含指定的數

ordinal:從小到大遍歷列印數(測試只用)

max:查詢最大值

min:查詢最小值

其中node類是輔助類,為了簡單沒有寫標準的 get,set方法。

因為該樹沒有自我保持平衡的能力,因此對於隨機插入的資料,效果較好,對於有區域性生降序特徵的插入序列,則會失去平衡,極端狀況下,樹退化成煉表。關於平衡樹請參見(tree2-3-4 ,紅黑樹 ,tree-2-3 )

tree的main函式僅為測試之用。

class node 

int value()

void left(node left)

void right(node right)

node left()

node right()

}class tree

private void add(node current, node node) else if(node.value() > current.value())

}boolean contains(int value)

private boolean contains(node current, int value)

void remove(int value)

private void remove(node parent, node current, int value)

if(parent == null) root = node;

else if(parent.left() == current) parent.left(node);

else parent.right(node);

} else if(value < current.value()) remove(current,current.left(),value);

else remove(current,current.right(),value);

}private node removemin(node parent, node current)

}int max()

private int max(node current)

int min()

private int min(node current)

void ordinal()

void ordinal(node current)

public static void main(string args)

}

二叉搜尋樹 二叉搜尋樹

題目 二叉搜尋樹 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 解釋 輸入為 ...