二叉排序樹轉換成雙向鍊錶

2021-07-14 02:41:28 字數 1120 閱讀 3321

在面試過程中經常會出現二叉排序樹轉換成雙向鍊錶的問題

思路:在二叉樹的學習中,我會發現,基本所有的問題都可以用樹的先序遍歷、中序遍歷、後序遍歷解決,所以我們可以使用這個思路來解決。

在此問題中,使用的是:後序遍歷。

/*

* 將二叉樹轉換成雙向鍊錶:直接在樹上改動(後序遍歷)

*/public node change_linkedlist(node head)

//採用後序遍歷的思想

node left=change_linkedlist(head.left);

node right=change_linkedlist(head.right);

//首先找到以head為根的左子樹的最右節點(左子樹的最大值)

while(left!=null&&left.right!=null)

//找到以head為根的右子樹的最左節點

while(right!=null&&right.left!=null)

//排除特殊情況:若左子樹一開始就是空的話(右子樹一開始就是空)

if(left!=null)

if(right!=null)

return head;

}

最後返回的結果是根節點的head;

所以要獲得頭結點就必須向前遍歷:

public

static

void

main(string args)

else

while(node!=null)

}}

最近自己複習寫了一種比較好理解的**

//二叉樹轉換成雙向鍊錶

public

void

inverttolinkedlist(node head )

//雙鏈表的連線

left.right=head;

head.left=left;

}if(head.right!=null)

//雙鏈表的連線

right.left=head;

head.right=right;

}}

二叉搜尋樹轉換成雙向鍊錶

問 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。public class treenode public class solution 如果已經遍歷到葉子節點,則將最後的節點轉變成葉子節點 if prootoftree.left ...

將二叉樹轉換成雙向鍊錶

思路 採用中序遍歷的方法,visit函式須要完畢的功能為 1 當前節點的左子節點指向上一次訪問的節點 2 將上一次訪問節點的右子節點指向當前節點 3 最後更新上一次訪問節點為當前節點。在第二步時須要推斷上一次訪問節點是不是為null,假設是,則第二步改為鍊錶的頭結點指向當前節點。程式例如以下 str...

鍊錶 將二叉搜尋樹轉換成雙向鍊錶

一 使用佇列 t o n s o n 按照二叉樹中序遍歷的順序,將每個節點放在佇列中 從佇列中依次彈出節點,並按照彈出的順序依次連線節點 public static node convert node root node head q.poll node pre head node cur null...