對二叉樹進行中序遍歷,得到乙個排序的序列,然後調整樹節點的指標即可得到
版本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 對於煉表頭節點 其直接前驅為...