輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
解題思路:
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指向前乙個節點,然後進行改指標引用,把壓棧的節點進行...