#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 二叉樹 要求給出中序遍歷的結果。下面分別就前序遍歷 中序遍歷 後序遍歷進行分析。規律 前序遍歷 根在前 子樹在根後且左子樹比右子樹靠前 中序遍歷 根在中 左子樹在根左邊,右子樹在根右邊 後序遍歷 根在後 子樹在根前且左子樹比...