二叉樹轉換為雙向鍊錶

2021-06-18 03:49:20 字數 1145 閱讀 3595

根據前序遍歷和中序遍歷還原構造二叉樹

思路:1)開始時雙向迴圈鍊錶為空,第乙個節點應該為最左邊的節點

2)中序遍歷二叉樹,將輸出的每個節點加到新建立的雙向鍊錶的末尾

#include #include using namespace std;

//樹的前序遍歷

int preorder1 = ;

//樹的中序遍歷

int inorder1 = ;

typedef struct node_

node;

//重建二叉樹

node * rebuildbtree(node * & root,int preorder, int inorder, int n, int pl, int pr, int il, int ir)

} int k = i - il;

if (i <= ir)

else

root->left = rebuildbtree(root->left,preorder, inorder, k,pl + 1 ,pl + k , il, i-1);

root->right = rebuildbtree(root->right,preorder, inorder, ir - i ,pl + k + 1,pr, i+1, ir);

return root;

}//中序遍歷樹

void convertinorder(node * root, node * &phead, node *&pcur)

convertinorder(root->left, phead, pcur);

//phead == 0,表示當前鍊錶為空,pcur表示鍊錶末尾節點

if (phead == 0)

else

root->left = pcur;

pcur = root;

convertinorder(root->right, phead, pcur);

}//列印雙向迴圈鍊錶

void printdoublelist(node * phead)

node * pcur = phead;

while(pcur)

printf("\n");

}int main()

二叉樹轉換為雙向鍊錶

1.把二元查詢樹轉變成排序的雙向鍊錶 題目 輸入一棵二元查詢樹,將該二元查詢樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只調整指標的指向。10 6 14 4 8 12 16 轉換成雙向鍊錶 4 6 8 10 12 14 16。首先我們定義的二元查詢樹 節點的資料結構如下 struct bs...

演算法)二叉樹轉換為雙向鍊錶

將二叉樹轉換為雙向鍊錶 2 7 1 3 6 8 雙向鍊錶 1 2 3 5 6 7 8 include include include include include include using namespace std struct bstree bstree doublelist null bs...

二叉樹轉換為雙向鍊錶 C

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。二叉搜尋樹指的是有序的,左結點小於根節點小於右結點,使用中序遍歷可以得到依次增大的乙個序列。題目的思路可以是先通過中序遍歷得到乙個有序的列表,再通過結點的平移得到雙向鍊錶。函式conve...