669 修剪二叉搜尋樹

2021-10-10 20:58:32 字數 687 閱讀 8995

root為空直接返回null;

root不為空:

要麼左邊出界:root->val很小,則root的左子樹值更小就不用看了,但root的右子樹中仍可能找到符合要求的結點,因此將root->right看作新的根節點繼續去找,並返回給上一層連線

要麼右邊出界:同理,將root->left看作新的根節點繼續去找,並返回給上一層連線

要麼不出界,root->val就在區間內,則分別尋找root的左孩子和右孩子,return root;

//整體框架:先判斷不滿足要求的情況,再按正常情況接住

class

solution

if(root-

>val > high)

//root值在區間內,則找到自己的左右孩子後,return root;

root-

>left =

trimbst

(root-

>left, low, high)

; root-

>right =

trimbst

(root-

>right, low, high)

;return root;}}

;

對於遞迴單層邏輯寫的過程中,不要往後想太多,很多時候,遞迴就是一層一層的呼叫自己就得到答案了,不需要自己加很多種情況的判斷;

669 修剪二叉搜尋樹

一開始的思路是憑藉乙個pre指標,pre指標指向當前遍歷節點的父節點,然後當發現該節點不符合要求時,利用二叉搜尋樹的性質,若該節點是小於左邊界的,則它的左子樹也勢必不符合要求,此時將該節點的父節點指向該節點的右子樹。當該節點的值大於r時同理。但是沒成功,自己沒想到這種方法的解決辦法,感覺乙個原因是因...

669 修剪二叉搜尋樹

一道easy題目,但是直接上手有點難度,麻煩的地方在於會改變二叉樹的結構 注意這是一顆二叉搜尋樹,應該能利用到二叉搜尋樹的性質來遍歷 然後給定區間是 lo w,hi gh low,high low,h igh 一顆二叉搜尋樹的定義是左小右大的,那麼一共還是三種情況,設根節點的值是val 則low v...

LeetCode 669 修剪二叉搜尋樹

給定乙個二叉搜尋樹,同時給定最小邊界l 和最大邊界 r。通過修剪二叉搜尋樹,使得所有節點的值在 l,r 中 r l 你可能需要改變樹的根節點,所以結果應當返回修剪好的二叉搜尋樹的新的根節點。如果當前節點值大於r,則說明該節點的右子樹都大於r 所以可直接捨棄該節點的右子樹,然後再繼續往左子樹 找打 r...