輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
idea
根據二叉搜尋樹的性質,左《根《右
其中序遍歷正好是乙個從小到大的排序。
本題借助二叉搜尋樹的中序遍歷的遞迴思路:
1.將左子樹轉換為左序列
2.儲存左序列到頭結點,並遍歷到尾結點,和當前根結點連線
3.將右子樹轉換為左序列
4.儲存右序列到頭結點,和當前根結點連線
5.返回最終列表的頭結點
code
/**
public class treenode }*/
public class solution
if(prootoftree.left==null&&prootoftree.right==null)
treenode left=convert(prootoftree.left);
treenode p=left;
while(p!=null&&p.right!=null)
if(left!=null)
treenode right=convert(prootoftree.right);
if(right!=null)
return left!=null?left:prootoftree;
}}
二叉搜尋樹與雙向鍊錶
1.問題描述 輸入一顆二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。來自 劍指offer 2.分析 對於二叉搜尋樹我們知道,樹的左孩子都比根節點要下,樹的右孩子都比根結點要大,根據這個特點,我們進行中序遍歷得到的序列就會滿足題目的要求,我們...
二叉搜尋樹與雙向鍊錶
問題描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。演算法 struct binarytreenode binarytreenode convert binarytreenode prootoftree plastnodeinl...
二叉搜尋樹與雙向鍊錶
排序二叉樹與雙向鍊錶.cpp 定義控制台應用程式的入口點。題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路 通過對一顆排序二叉樹的認識可知一顆排序二叉樹中序輸出就是有序的 通過後序遍歷讓子樹分別找到自己的left和rig...