二元查詢樹轉變成排序的雙向鍊錶

2022-05-05 08:42:09 字數 1231 閱讀 6508

把二元查詢樹轉變成排序的雙向鍊錶

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

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

10/   \

6   14

/ \   / \

4 8 12 8

轉換成雙向鍊錶

4=6=8=10=12=14=16

利用中序遍歷來解決比較簡單,這裡我主要提供一種非遞迴版本來解決這個問題

遞迴版本:(copy自

templatestruct

treenode;//

要求兩個輸出引數要初始化為null

templatevoid convertbstree2list(treenode* ptreeroot/*

樹的根節點

*/, treenode*& plisthead/*

雙向鍊錶的頭指標

*/, treenode*& plistlast/*

雙向鍊錶的尾指標*/)

//中序遍歷左子樹

convertbstree2list(ptreeroot->plchild, plisthead, plistlast);

//處理當前節點,把節點鏈到雙向鍊錶尾部

//修改當前節點左指標,指向雙向鍊錶尾部

ptreeroot->plchild =plistlast;

if (plistlast) //

非第乙個節點

else

//第乙個節點

plistlast =ptreeroot;

//中序遍歷右子樹

convertbstree2list(ptreeroot->prchild, plisthead, plistlast);

}

二叉樹的前序、中序、後序遍歷非遞迴實現

treenode* turntreetodlinklist(treenode *root)

}root->left =prenode;

if(prenode)

prenode->right =root;

else

head =root;

prenode =root;

if (root->right !=nullptr)

}lastroot =root;

sta.pop();

}return

head;

}

二元查詢樹轉變成排序的雙向鍊錶

描述 輸入一顆二元查詢樹,將二元查詢樹轉換成乙個排序的雙向鍊錶。要求不能建立人新建立的結點,只調整指標的指向。我的思路 利用遞迴思想進行解答。1.分解,將結點p分解成左子樹和右自樹兩個部分。2.解決子問題,左子樹變成乙個雙向鍊錶,右子樹變成乙個雙向鍊錶。3.合併,將結點p的left 連線到左子樹中最...

把二元查詢樹轉變成排序的雙向鍊錶

1.首先是如何建立乙個二叉查詢樹 2.再對二叉查詢樹進轉換 如下 bstreenode1.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std struct bstreenode typedef bstreenode doubl...

把二元查詢樹轉變成排序的雙向鍊錶

把二元查詢樹轉變成排序的雙向鍊錶 題目 輸入一棵二元查詢樹,將該轉換成個排序的雙向鍊錶。要求不能建立任何新的結點,只調整指標向。include include typedef struct bittree bittree void addnode bittree root,int value p r...