輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
這道題我本身的思路也是遞迴,但是整個過程沒有用到返回值,不知道為什麼我總是不太會用返回值.......。 具體過程 main函式的作用是 找到當前引數節點的左子樹的 最大值(他左子樹上面一直找右節點),和引數節點進行連線,右側一樣找到有字數上最小的,和引數節點連線,同時將 當前引數節點的左右子樹都放進 main()函式中執行,可是不知道為什麼總是顯示超時。。。。
於是借鑑了別人的思路,這個思路很巧妙, 定義乙個函式main,他的作用是在左右子樹反別返回了各自的成型的鍊錶結構的頭結點時,和當前根節點組合出乙個新的鍊錶 ,返回新的鍊錶的頭結點,返回給他的父級函式使用
**如下,,,我有一種感覺,**開始看不懂,多背背 背過之後就能看懂了............
/**public class treenode }*/
public
class
solution
if(prootoftree.left==null&&prootoftree.right==null
) treenode left=convert(prootoftree.left);
treenode p=left;
if(p!=null
) p.right=prootoftree;
prootoftree.left=p;
}treenode right=convert(prootoftree.right);
if(right!=null
)
return left==null?prootoftree:left;
}}
二叉搜尋樹與雙向鍊錶
1.問題描述 輸入一顆二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。來自 劍指offer 2.分析 對於二叉搜尋樹我們知道,樹的左孩子都比根節點要下,樹的右孩子都比根結點要大,根據這個特點,我們進行中序遍歷得到的序列就會滿足題目的要求,我們...
二叉搜尋樹與雙向鍊錶
問題描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。演算法 struct binarytreenode binarytreenode convert binarytreenode prootoftree plastnodeinl...
二叉搜尋樹與雙向鍊錶
排序二叉樹與雙向鍊錶.cpp 定義控制台應用程式的入口點。題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路 通過對一顆排序二叉樹的認識可知一顆排序二叉樹中序輸出就是有序的 通過後序遍歷讓子樹分別找到自己的left和rig...