將二叉樹轉換為排序雙向鍊錶

2021-08-08 12:15:02 字數 634 閱讀 3144

對二叉樹進行中序遍歷,得到乙個排序的序列,然後調整樹節點的指標即可得到

版本1  非遞迴:

treenode* convert(treenode* prootoftree)

p=stacktree.top();

stacktree.pop();

if(flag)else

p=p->right;

}return root;

}版本2 遞迴版:

1、首先對左子樹進行轉換,並返回轉換後鍊錶的首節點。

2、找出左子樹的鍊錶的最後乙個節點

3、將根節點加入到左子樹鍊錶的尾端

4 、對右子樹節點進行轉換,返回鍊錶首節點

5、將右子樹煉表首節點加入做子樹尾端

6、根據左子樹鍊錶是否為空進行返回。

treenode* convert(treenode* prootoftree)

p->right=prootoftree;

prootoftree->left=p;

}treenode* right=convert(prootoftree->right);

if(right!=null)

return left!=null ? left:prootoftree;

}

二叉樹轉換為雙向鍊錶

根據前序遍歷和中序遍歷還原構造二叉樹 思路 1 開始時雙向迴圈鍊錶為空,第乙個節點應該為最左邊的節點 2 中序遍歷二叉樹,將輸出的每個節點加到新建立的雙向鍊錶的末尾 include include using namespace std 樹的前序遍歷 int preorder1 樹的中序遍歷 int...

二叉樹轉換為雙向鍊錶

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

將二叉搜尋樹轉換為排序雙向鍊錶

題目描述 有乙個搜尋二叉樹,對於樹中的任意乙個節點,其左子樹的所有值小於該節點的值,而其右子樹的所有值大於該節點的值。要求 在不定義任何新的節點情況下,將該二叉樹轉換成為乙個排序雙向鍊錶。假設有上面的二叉樹,那麼其轉換為雙向鍊錶後的順序應該為 2 3 4 5 6 7 8 對於煉表頭節點 其直接前驅為...