1.a)遞迴轉化左子樹為雙向鍊錶;
1.b)找出根結點的前驅節點(是左子樹的最右的節點)
1.c)將上一步找出的節點和根結點連線起來
2,如果右子樹不為null,處理右子樹(和上面的很類似)
1.a)遞迴轉化右子樹為雙向鍊錶;
1.b)找出根結點的後繼節點(是右子樹的最左的節點)
1.c)將上一步找出的節點和根結點連線起來
3,找到最左邊的節點並返回
下面是**實現:
bintree2listutil函式返回的node* 是root節點,bintree2list函式返回的是頭節點
this is the core function to convert tree to
list
. this function follows
steps 1
and2 of the above algorithm *
/node* bintree2listutil(node* root)
// convert the right subtree and link to root
if (root->right!=
null)
return root;
}// the main function that first calls bintree2listutil(), then follows step 3
// of the above algorithm
node* bintree2list(node *root)
{ // base case
if (root ==
null)
return root;
// convert to dll using bintree2listutil()
root = bintree2listutil(root);
// bintree2listutil() returns root node of the converted
// dll. we need pointer to the leftmost node which is
// head of the constructed dll, so move to the leftmost node
while (root->left !=
null)
root = root->left;
return (root);
二叉樹轉雙向鍊錶
include using namespace std 樹節點 struct node typedef struct node link 構造樹 void insert tree link h,int t if h val t insert tree h left,t else insert tre...
二叉樹轉雙向鍊錶
這是一道挺有趣的題,其解題的思路主要還是二叉樹的中序遍歷 先建立乙個頭結點list,然後通過中序遍歷二叉樹,把結點串起來即可!注意點 1 需要有乙個指標來指向上乙個已遍歷過的結點 2 如果不建立頭結點,在後面遍歷判斷時比較麻煩 include using namespace std struct n...
程式設計練習 二叉樹(二叉樹轉雙向鍊錶)
1.把二元查詢樹轉變成排序的雙向鍊錶 題目 輸入一棵二元查詢樹,將該二元查詢樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只調整指標的指向。10 6 14 4 8 12 16 轉換成雙向鍊錶 4 6 8 10 12 14 16。首先我們定義的二元查詢樹 節點的資料結構如下 struct bs...