【題目】
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
【**】
//直接用中序遍歷
public
class
solution
private
void
convertsub(treenode prootoftree) else
convertsub(prootoftree.right);//右子樹遞迴
}}
方法二:遞迴版
解題思路:
1.將左子樹構造成雙鏈表,並返回煉表頭節點。
2.定位至左子樹雙鏈表最後乙個節點。
3.如果左子樹煉表不為空的話,將當前root追加到左子樹鍊錶。
4.將右子樹構造成雙鏈表,並返回煉表頭節點。
5.如果右子樹煉表不為空的話,將該鍊錶追加到root節點之後。
6.根據左子樹鍊錶是否為空確定返回的節點。
/**
public class treenode }*/
public
class
solution
// 3.如果左子樹煉表不為空的話,將當前root追加到左子樹鍊錶
if(left!=null)
// 4.將右子樹構造成雙鏈表,並返回煉表頭節點
treenode right = convert(root.right);
// 5.如果右子樹煉表不為空的話,將該鍊錶追加到root節點之後
if(right!=null)
return left!=null?left:root;
}}
二叉搜尋樹與雙向鍊錶
1.問題描述 輸入一顆二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。來自 劍指offer 2.分析 對於二叉搜尋樹我們知道,樹的左孩子都比根節點要下,樹的右孩子都比根結點要大,根據這個特點,我們進行中序遍歷得到的序列就會滿足題目的要求,我們...
二叉搜尋樹與雙向鍊錶
問題描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。演算法 struct binarytreenode binarytreenode convert binarytreenode prootoftree plastnodeinl...
二叉搜尋樹與雙向鍊錶
排序二叉樹與雙向鍊錶.cpp 定義控制台應用程式的入口點。題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路 通過對一顆排序二叉樹的認識可知一顆排序二叉樹中序輸出就是有序的 通過後序遍歷讓子樹分別找到自己的left和rig...