劍指27 二叉搜尋樹與雙向鍊錶

2021-09-14 03:47:29 字數 833 閱讀 2548

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。

解題思路:

1、用遞迴,節點的左鍊錶相鄰節點為該節點的左子樹最右節點,節點的右鍊錶的相鄰節點為該節點的右子樹的最左節點

2、用非遞迴,中序遍歷、記錄節點的前乙個節點

方法一:

//遞迴,先判斷左子樹,再判斷右子樹。左指標指向左子樹最右節點,右指標指向右子樹最左節點

public treenode convert(treenode prootoftree)

//3.如果左子樹煉表不為空的話,將當前prootoftree追加到左子樹鍊錶

if(left!=null)

//4.將右子樹構建成雙鏈表

treenode right=convert(prootoftree.right);

// 5.如果右子樹煉表不為空的話,將該鍊錶追加到prootoftree節點之後

p=right;

if(right!=null)

return left!=null?left:prootoftree;

}

方法二:

//中序遍歷二叉樹,非遞迴

public treenode convert(treenode prootoftree)

p=link.getlast();

link.removelast();

if(flag==true)

else

p=p.right;

}return prootoftree;

}

劍指Offer27二叉搜尋樹與雙向鍊錶

題目 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶,要求不能建立任何新節點,只能調整樹中結點指標的指向。最後輸出排序後雙向鍊錶。分析 因為二叉搜尋樹就是乙個排序的,最後要求輸出乙個排序的雙向鍊錶,其實只要畫圖就能看出裡面的規律,這個題的規律很好得出來,但是其中的 實現是相當困難的,至少...

劍指offer 27二叉搜尋樹與雙向鍊錶

題目 輸入乙個2叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的鍊錶。要求不能建立任何新的節點,只能調整書中節點指標的指向。由於要求轉換後的鍊錶是排序的,而中序遍歷可以從小到大遍歷二叉樹的每個節點,因此可以中序遍歷該二叉樹。當遍歷到根節點時,它的左子樹已經轉換成乙個排序的鍊錶,把鍊錶的最後結點與根節點相連即...

《劍指offer》 二叉搜尋樹與雙向鍊錶

題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。解法 主要應用到二叉樹的中序遍歷。將左子樹遍歷進行不斷壓棧,然後再出棧。用兩個指標,current指向當前的樹的節點,pre指向前乙個節點,然後進行改指標引用,把壓棧的節點進行...