二叉搜尋樹(bst)也稱為二叉排序樹或二叉查詢樹。
二叉搜尋樹:一棵二叉樹,可以為空;如果不為空,滿足以下性質。
查詢從根結點開始,如果樹為空,返回null。
若樹非空,則根結點關鍵字和x進行比較,並進行處理:
若兩者比較結果相等,搜尋完成,返回指向此結點的指標。
上述**是用尾遞迴(在程式分支的最後進行遞迴),效率不高。從編譯的角度講,尾遞迴都是可以用迴圈來實現的。所以,可將尾遞迴改為迭代函式。
position iterfind( elementtype x, bintree bst )
return null;
}
最大元素一定是在樹的最右分支的端結點上
最小元素一定是在樹的最左分支的端結點上
//查詢最小值的遞迴演算法
position findmin( bintree bst )
else
}//查詢最大值的迭代演算法
}
有三種情況
要刪除的是葉結點:直接刪除,並修改其父結點指標—置為null
要刪除的結點只有乙個孩子結點:將其父結點的指標指向要刪除結點的孩子結點。
要刪除的結點有左、右兩棵子樹:用另一結點替代被刪除的結點:右子樹的最小元素,或者左子樹的最大元素。
bintree delete( elementtype x, bintree bst )
else
}
return bst
}
二叉搜尋樹 二叉搜尋樹
題目 二叉搜尋樹 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 解釋 輸入為 ...