把二元查詢樹轉變成排序的雙向鍊錶
題目:輸入一棵二元查詢樹,將該轉換成個排 序的雙向鍊錶。
要求不能建立任何新的結點,只調整指標向。
10/ \
6 14
/ \ / \
4 8 12 8
轉換成雙向鍊錶
4=6=8=10=12=14=16
利用中序遍歷來解決比較簡單,這裡我主要提供一種非遞迴版本來解決這個問題
遞迴版本:(copy自
templatestructtreenode;//
要求兩個輸出引數要初始化為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...