二叉搜尋樹

2021-08-14 14:35:14 字數 1291 閱讀 6282

1、定義

左孩子的值都比自己小,右孩子的值都比自己大

2、搜尋

偽**如下

bst_search(root,x)

輸入:root(指向二叉搜尋樹的根節點)以及x(待搜尋的某數)

輸出:node(指向值為x的節點的指標,如果沒有值為x的節點,則為nil)

begin

if(root == nil || root.key == x)elseelse

}end

3、插入

首先在樹中查詢x,如果已經有了,則操作終止;否則,在某個節點下插入x

bst_insert(root,x)

輸入:root(指向二叉搜尋樹根節點的指標)以及x(待插入的數)

輸出:如果插入失敗則返回nil,如果成功則返回x在樹中的index

begin

if(root == nil)elseelseelse}}

// 能跳出while說明要不就是child為nil了,要不就是node為nil了

if(child != nil)else

return child;

}else

}end

4、刪除

bst_delete(root,x)

輸入:root(指向二叉樹根節點的指標)以及x(待刪除的值)

輸出:如果不存在,則不作為;如果存在,則刪除並改變這棵樹

begin

// 如果樹為空

if(root == nil)elseelse

// 能跳出迴圈說明已經找到最接近x的節點,並且該節點的left為nil

root.key = node.key;

parent.left = node.right;

}}elseelse

// 能跳出迴圈說明已經找到最接近x的節點,並且該節點的right為nil

root.key = node.key;

parent.right = node.left;}}

}elseelse

}// 跳出迴圈要麼是node為nil,要麼是node.key為x

if(node == nil)elseelse

}else if(node.right == nil)else

}elseelse

// 能夠跳出迴圈說明node1.right為nil

node.key = node1.key;// 將左字樹最右孩子的key給node,從而刪除x

parent1.right = node1.left;// 無論node1.left是否為nil}}

}}}end

二叉搜尋樹 二叉搜尋樹

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