01二叉查詢樹轉化成雙向鍊錶

2021-07-04 01:05:50 字數 1085 閱讀 7736

題目:輸入一棵二元查詢樹,將該二元查詢樹轉換成乙個排序的雙向鍊錶。 

要求不能建立任何新的結點,只調整指標的指向。

思路:head指向雙向煉表頭,x指向雙向鍊錶尾,中序遍歷二叉樹,每當遍歷乙個到乙個節點時,將它鏈結到雙向鍊錶尾。

#include using namespace std;

#define max 10

struct bstreenode

*head, *x;

bstreenode* inserttree(bstreenode* root, bstreenode* z)

else if (x->m_nvalue < z->m_nvalue)

else

}if (!y)

else

else

}return root;

}void deletedoublelist(bstreenode* head)

}void printdoublelist(bstreenode* head)

cout << endl;

}void convertcurrentnode(bstreenode* root)

else

}void converttodoublelist(bstreenode* root)

convertcurrentnode(root);

if (root->m_pright)

}int main()

; for (int i = 0; i < max; ++i)

converttodoublelist(root);

cout << endl;

cout << "after convert to double list:\n";

printdoublelist(head);

deletedoublelist(head);

head = null;

cout << "after delete double list:\n";

printdoublelist(head);

return 0;

}

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

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。其中乙個測試用例 按層序遍歷輸入 對應輸出應該為 from left to right are 4,6,8,10,12,14,16 from right to left are 16,1...

將排序二叉樹轉化成雙向鍊錶

將排序二叉樹轉化成雙向鍊錶,應該是一道很常見的面試題目,網上的實現比較多,有用遞迴也有用中序遍曆法的。看到一位外國友人的實現,還是比較清晰的,思路如下 1,如果左子樹不為null,處理左子樹 1.a 遞迴轉化左子樹為雙向鍊錶 1.b 找出根結點的前驅節點 是左子樹的最右的節點 1.c 將上一步找出的...

怎樣把二叉搜尋樹轉化成排序雙向鍊錶?

一 首先介紹二叉搜尋樹 概念 二叉搜尋樹是指在一顆二叉樹上,這顆二叉樹上的每個節點都有 所有左節點 該節點 所有右節點 例如下樹 二 根據搜尋二叉樹特性分析 因為二叉樹的實現也是靠指標實現的,所以其資料結構和雙向鍊錶的結構是相同的 若把箭頭話上,就變成了這樣子。注 紅色代表指向空 所以根據特性,我們...