輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
解法一: 基礎的遞迴
1.構建左子樹為雙向鍊錶,返回煉表頭節點left
2.定位到左雙向鍊錶最後乙個節點
3.左雙向鍊錶最後乙個節點與當前節點雙向鏈結
4.構建右子樹為雙向鍊錶,返回煉表頭結點right
5.將右雙向煉表頭節點和當前節點連線起來
function
permutation
(str)
var sorttemp="";
var arr = str.
split(""
);result =
sortstring
(arr, sorttemp,
);return result;
}function
sortstring
(arr, sorttemp, res)
else
;for
(var i =
0; i < arr.length; i++)}
}return res;
}//第二種
/* function treenode(x) */
var leftlast;
function
convert
(root)
//返回最左邊的頭節點,並且此時左雙向鍊錶的最後乙個節點也是該節點
if(root ==
null
&& root ==
null
)//構建左子樹為雙向鍊錶,返回煉表頭節點left
var left =
convert
(root.left)
;//若左子樹存在,則將左雙向鍊錶最後乙個節點與當前節點連線起來
//這裡,leftlast和left的存在與否並不完全一致哦!
if(left)
//那麼此時不論有沒有left,左雙向鍊錶的最後乙個節點都是當前root啦
leftlast = root;
//構建右子樹為雙向鍊錶,返回煉表頭結點right
var right =
convert
(root.right)
;//將右雙向煉表頭節點和當前節點連線起來
if(right)
//若有左子樹,返回的永遠是最左邊的葉子節點(也就是最小的節點),若無左子樹,則根節點就是最小的節點
return left?left:root;
}
二叉搜尋樹與雙向鍊錶
1.問題描述 輸入一顆二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。來自 劍指offer 2.分析 對於二叉搜尋樹我們知道,樹的左孩子都比根節點要下,樹的右孩子都比根結點要大,根據這個特點,我們進行中序遍歷得到的序列就會滿足題目的要求,我們...
二叉搜尋樹與雙向鍊錶
問題描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。演算法 struct binarytreenode binarytreenode convert binarytreenode prootoftree plastnodeinl...
二叉搜尋樹與雙向鍊錶
排序二叉樹與雙向鍊錶.cpp 定義控制台應用程式的入口點。題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路 通過對一顆排序二叉樹的認識可知一顆排序二叉樹中序輸出就是有序的 通過後序遍歷讓子樹分別找到自己的left和rig...