題目描述
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
**實現:
import sun.reflect.generics.tree.tree;
class
treenode
}public
class
interviewtest
if(prootoftree.left == null && prootoftree.right == null)
// 1. 先遞迴處理左子樹
// left 就是左子樹的鍊錶的根節點
treenode left =
convert
(prootoftree.left)
;// 2. 還需要找到 left 的尾部
treenode lefttail = left;
while
(lefttail != null && lefttail.right != null)
// 迴圈結束, left 就指向了左側鍊錶的尾部
// 3. 把左子樹和當前節點連線起來
if(left != null)
// 4. 再遞迴處理右子樹
treenode right =
convert
(prootoftree.right)
;// 因為右子樹的頭部與當前節點相連, 所以不用找到 right 的尾部
// 5. 把當前節點和右子樹連線起來
if(right != null)
// 6. 最終返回頭結點
// 如果 left 為空, 鍊錶的頭結點就是 prootoftree
// 如果 left 為非空, 鍊錶的頭結點就是 left
return left == null ? prootoftree : left;}}
}
二叉搜尋樹與雙向鍊錶
1.問題描述 輸入一顆二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。來自 劍指offer 2.分析 對於二叉搜尋樹我們知道,樹的左孩子都比根節點要下,樹的右孩子都比根結點要大,根據這個特點,我們進行中序遍歷得到的序列就會滿足題目的要求,我們...
二叉搜尋樹與雙向鍊錶
問題描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。演算法 struct binarytreenode binarytreenode convert binarytreenode prootoftree plastnodeinl...
二叉搜尋樹與雙向鍊錶
排序二叉樹與雙向鍊錶.cpp 定義控制台應用程式的入口點。題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路 通過對一顆排序二叉樹的認識可知一顆排序二叉樹中序輸出就是有序的 通過後序遍歷讓子樹分別找到自己的left和rig...