比較簡單的是二叉樹遞迴的建立方法而非遞迴建立想起來有點難度,本質上是模擬函式棧的操作,所以要用到棧這一資料結構。
c++用到了stl裡的棧,所以不用自己定義,而c語言需要自己定義棧容器,我用的是我之前寫的棧容器稍加修改
#include
#include
#include
using
namespace std;
//二叉樹節點
class
node};
node* root;
/*根據先序序列,非遞迴建立二叉樹
大致思路就是利用棧模擬函式棧的過程
treestr為先序序列的二叉樹,#代表空
*/void
precreate
(node*
&root,string treestr)
//遍歷每個字元
for(
int i =
1; i < treestr.
length()
; i++
)//如果為#,則將當前節點調整為右孩子,並從堆疊裡彈出此節點
else}}
}//先序遍歷
void
preorder
(node*
&root)
intmain()
#include
#include
#include
char postex[
200]=;
//字尾表示式
int counter =0;
//二叉樹的定義
typedef
struct treenode tree,
*mbtree;
typedef
struct
stack;
//初始化棧
intinitstack
(stack* stack)
//是否為空
intstackempty
(stack* stack)
//取棧頂元素
mbtree stackgettop
(stack* stack)
//壓棧
mbtree stackpush
(stack* stack, mbtree element)
//彈出
mbtree stackpop
(stack* stack)
//非遞迴二叉樹遍歷
void
precreatebtree
(mbtree *node,
char
* treearray)
else}}
//前序遍歷
void
pre(mbtree p)
}//中序遍歷
void
in(mbtree p)
}//後序遍歷
void
post
(mbtree p)
}int
main()
二叉樹 二叉樹遍歷 根據先序建立二叉樹
題目描述 編乙個程式,讀入使用者輸入的一串先序遍歷字串,根據此字串建立乙個二叉樹 以指標方式儲存 例如如下的先序遍歷字串 abc de g f 其中 表示的是空格,空格字元代表空樹。建立起此二叉樹以後,再對二叉樹進行中序遍歷,輸出遍歷結輸入 輸入包括1行字串,長度不超過100。輸出 可能有多組測試資...
二叉樹非遞迴演算法
程式小白,希望和大家多交流,共同學習 非遞迴二叉樹借用棧 使用鏈棧,使用它的原因 1.需要使用先進後出的儲存結構 2.需要儲存資料個數不定 三種遍歷儲存的雖然都是相同的資料型別,但是使用的目的不一樣,所以使用的位置不一樣 先序遍歷 根據給定的根節點,直接訪問根節點 左結點,有左孩子的結點有兩重身份 ...
非遞迴二叉樹
由於棧和遞迴原理相同,且遞迴建立二叉樹的效率較低,所以我們可以借助棧來實現二叉樹的非遞迴建立以及遍歷。include include using namespace std template struct binarytreenode template class binarytree binary...