劍指offer(20)二叉搜尋樹與雙向表

2022-02-08 06:54:51 字數 1113 閱讀 9226

題目:

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。

思路一:遞迴法 

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 solution 

public 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 判斷給定陣列...