二叉樹 遍歷

2021-07-05 19:30:56 字數 3100 閱讀 3096

#include#include#include#define  maxsize  20  //最多結點個數

using namespace std;

/*二叉鍊錶*/

typedef struct bnodebnode,* btree;

/*順序棧*/

typedef btree datatype;

typedef structseqstack,* pseqstack;

/*迴圈佇列*/

typedef structseqqueue,* pseqqueue;

pseqstack init_seqstack(void); //建空棧

void push_seqstack(pseqstack s,datatype x); //入棧

int empty_seqstack(pseqstack s); //判斷棧是否為空

void pop_seqstack(pseqstack s,datatype * y);//出棧

void destroy_seqstack(pseqstack * s); //銷毀棧

pseqqueue init_seqqueue(void); //迴圈佇列初始化

int empty_seqqueue(pseqqueue q); //判斷隊空

void in_seqqueue(pseqqueue q,datatype x); //入隊

void out_seqqueue(pseqqueue q,datatype * y);//出隊

void destory_seqqueue(pseqqueue * q); //銷毀佇列

btree createbintree(void);//先序建立二叉樹

void preorder(btree t); //遞迴先序遍歷

void inorder(btree t); //遞迴中序遍歷

void postorder(btree t); //遞迴後序遍歷

void levelorder(btree t); //層序遍歷

void nrpreorder(btree t); //非遞迴先序遍歷

void nrinorder(btree t); //非遞迴中序遍歷

void nrpostorder(btree t); //非遞迴後序遍歷

/*主函式*/

int main()

cout<<"\n\n遞迴先序遍歷:";

preorder(t);

cout<<"\n遞迴中序遍歷:";

inorder(t);

cout<<"\n遞迴後序遍歷:";

postorder(t);

cout<<"\n\n層序遍歷:";

levelorder(t);

cout<<"\n\n非遞迴先序遍歷:";

nrpreorder(t);

cout<<"\n非遞迴中序遍歷:";

nrinorder(t);

cout<<"\n非遞迴後序遍歷:";

nrpostorder(t);

return 1;

}/******************************順序棧的一些基本操作******************************/

/*建空棧*/

pseqstack init_seqstack(void)

return s;

}/*入棧*/

void push_seqstack(pseqstack s,datatype x)else

}/*判斷棧是否為空*/

int empty_seqstack(pseqstack s)

/*出棧*/

void pop_seqstack(pseqstack s,datatype * y)else

}/*銷毀棧*/

void destroy_seqstack(pseqstack * s)

/******************************迴圈佇列的一些基本操作******************************/

/*迴圈佇列初始化*/

pseqqueue init_seqqueue(void)

return q;

}/*判斷隊空*/

int empty_seqqueue(pseqqueue q)

/*入隊*/

void in_seqqueue(pseqqueue q,datatype x)else

}/*出隊*/

void out_seqqueue(pseqqueue q,datatype * y)else

}/*銷毀佇列*/

void destory_seqqueue(pseqqueue * q)

/*先序建立二叉樹*/

btree createbintree(void)

return t;

}/******************************遞迴******************************/

void preorder(btree t)

}void inorder(btree t)

}void postorder(btree t)

}/******************************層序遍歷******************************/

void levelorder(btree t)

destory_seqqueue(&q);

}/******************************非遞迴******************************/

void nrpreorder(btree t)else

} destroy_seqstack(&s);

}void nrinorder(btree t)else

} destroy_seqstack(&s);

}void nrpostorder(btree t)else

} while(!empty_seqstack(s1))

destroy_seqstack(&s1);

destroy_seqstack(&s2);

}

構建二叉樹 遍歷二叉樹

陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...

二叉樹遍歷

二叉樹的遍歷非常重要,但對已一棵比較複雜的樹,要寫出它的先 中 後序遍歷,往往不是那麼簡單,也很容易犯錯。這裡介紹一種比較直觀且不容易犯錯的方法。對於圖1所示的二叉樹,要寫出它的先 中 後序遍歷,往往很容易出錯。圖 1 其實,我們可以用圖2中的紅線描畫出二叉樹的輪廓。圖 2 而對於樹上的每乙個節點,...

二叉樹遍歷

描述 華為實習生招聘,有一道類似如下的題目 給出二叉樹,如圖1所示 圖 1 二叉樹 要求給出中序遍歷的結果。下面分別就前序遍歷 中序遍歷 後序遍歷進行分析。規律 前序遍歷 根在前 子樹在根後且左子樹比右子樹靠前 中序遍歷 根在中 左子樹在根左邊,右子樹在根右邊 後序遍歷 根在後 子樹在根前且左子樹比...