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

2022-07-07 11:06:09 字數 1217 閱讀 8711

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

為了讓您更好地理解問題,以下面的二叉搜尋樹為例:

我們希望將這個二叉搜尋樹轉化為雙向迴圈鍊錶。鍊錶中的每個節點都有乙個前驅和後繼指標。對於雙向迴圈鍊錶,第乙個節點的前驅是最後乙個節點,最後乙個節點的後繼是第乙個節點。

下圖展示了上面的二叉搜尋樹轉化成的鍊錶。「head」 表示指向鍊錶中有最小元素的節點。

特別地,我們希望可以就地完成轉換操作。當轉化完成以後,樹中節點的左指標需要指向前驅,樹中節點的右指標需要指向後繼。還需要返回鍊錶中的第乙個節點的指標。

/*

// definition for a node.

class node

public node(int _val)

public node(int _val,node _left,node _right)

};*/

class solution

cur=stack.pop();

if(pre==null)else

//轉移指標

pre=cur;

cur=cur.right;//看看右子節點是否為空

}//處理首尾指標

pre.right=head;

head.left=pre;

return head;}}

/*

// definition for a node.

class node

public node(int _val)

public node(int _val,node _left,node _right)

};*/

class solution

public void dfs(node node)

dfs(node.left);//左子節點

if(pre==null)else

pre=node;

dfs(node.right);//右子節點}}

劍指Offer 26 二叉搜尋樹和雙向鍊錶

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。主要是使用遞迴,設定乙個head和end,head只在第一次設定值,後面就是將end的right指向當前node,將當前node的left指向end,把end指向當前的node。clas...

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

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

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

題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。分析 遞迴 struct treenode class solution if prootoftree left null prootoftree right null 1 將...