二叉樹演算法 二叉樹的非遞迴根據先序序列建立

2021-09-01 12:47:55 字數 1555 閱讀 4898

比較簡單的是二叉樹遞迴的建立方法而非遞迴建立想起來有點難度,本質上是模擬函式棧的操作,所以要用到棧這一資料結構。

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...