題目:
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
思路一:遞迴法
1
.將左子樹構造成雙鏈表,並返回煉表頭節點。
2
.定位至左子樹雙鏈表最後乙個節點。
3
.如果左子樹煉表不為空的話,將當前root追加到左子樹鍊錶。
4
.將右子樹構造成雙鏈表,並返回煉表頭節點。
5
.如果右子樹煉表不為空的話,將該鍊錶追加到root節點之後。
6
.根據左子樹鍊錶是否為空確定返回的節點。
class untitled }} //樹的定義
class treenode
public void setnode(treenode node1,treenode node2)
}//解方法
class solution
// 3.如果左子樹煉表不為空的話,將當前root追加到左子樹鍊錶
if(left!=null)
// 4.將右子樹構造成雙鏈表,並返回煉表頭節點
treenode right = convert(root.right);
// 5.如果右子樹煉表不為空的話,將該鍊錶追加到root節點之後
if(right!=null)
return left!=null?left:root;
} }
思路二:
如果知道二叉搜尋樹的中序遍歷是有序列的話,那麼這道題的方法也就呼之欲出了
public class solutionpublic void converthelp(treenode root)else
converthelp(root.right);
}}
由於中序遍歷的特點,第一次碰到的絕對是最左下的結點,因此可以將頭節點賦給他。
劍指offer 20 二叉樹按層遍歷
按層遍歷 從上往下列印出二叉樹的每個節點,同層節點從左至右列印。思路 使用佇列實現,首先將二叉樹頭結點存入佇列中,在迴圈中將節點左節點存入佇列,然後將右節點存入佇列存入佇列中,然後出隊的時候獲取節點值 struct treenode class solution if temp right null...
劍指offer 二叉搜尋樹與雙向連線
題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。普通的二叉樹也可以轉換成雙向鍊錶,只不過不是排序的 思路 與中序遍歷相同 採用遞迴,先鏈結左指標,再鏈結右指標 1,更改doublelinkedlist,最後返回list的第乙...
劍指offer 二叉樹 二叉樹搜尋樹
package bst import j a.util.public class bst if pre.length 0 in.length 0 treenode root new treenode pre 0 for int i 0 i in.length i return root 判斷給定陣列...