劍指offer 26二叉搜尋樹與雙向鍊錶

2021-08-26 05:42:36 字數 897 閱讀 3690

題目描述

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

分析:遞迴

/*

struct treenode

};*/

class solution

if(prootoftree->left==

null

&&prootoftree->right==

null)

//1、將左子樹構造成雙鏈表,並返回該煉表頭結點left

treenode* left=convert(prootoftree->left);

//2、定位到左子樹鍊錶的最後乙個節點(左子樹最右邊的節點)

treenode* plastnode=left;//建立乙個臨時節點plastnode,用來遍歷找到左鍊錶的最後乙個節點(左子樹最右邊的節點),plastnode初始化指向做左子樹的根節點,

while(plastnode!=

null

&&plastnode->right!=

null)

//3、如果左子樹煉表不為空,將當前prootoftree追加到左子樹煉表後

if(left!=

null)

//4、將右子樹構造成雙鏈表,並返回該鍊錶的頭結點right

treenode* right=convert(prootoftree->right);

//5、如果右子樹煉表不為空,將右子樹鍊錶追加到當前prootoftree後

if(right!=

null)

if(left!=

null)

else//根據左子樹鍊錶是否為空返回整個雙向鍊錶的頭指標。

}};

劍指offer 26 二叉搜尋樹與雙向鍊錶

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路 將二叉搜尋樹convert為雙向鍊錶,嘗試遞迴解決。遞迴關係 當訪問到節點root時,root left與轉換後的左子樹鍊錶完成互指,root right與轉換後的右子樹鍊錶完成互...

劍指offer26 二叉搜尋樹與雙向鍊錶

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。解題思路 類似於遞迴的中序遍歷 1.將左子樹構造成雙鏈表,並返回煉表頭節點。2.定位至左子樹雙鏈表最後乙個節點。3.如果左子樹煉表不為空的話,將當前prootoftree追加到左子樹鍊錶...

劍指Offer(26) 二叉搜尋樹與雙向鍊錶

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。二叉搜尋樹的特點 左結點的值 根結點的值 右結點的值,所以二叉搜尋樹中序遍歷的序列,就是排序的順序。根據排序雙向鍊錶的定義,根結點將和它的左子樹的最大乙個結點鏈結起來,同時它還將和它右子...