最近在溫習資料結構,通常網上看到的二叉樹非遞迴中序遍歷如以下形式(
#define maxnode 100 //二叉樹最大節點數
//定義二叉樹鏈式結構
typedef struct bitnode
bitnode,*bitree;
//二叉樹進行中序非遞迴遍歷
void nrinorder(bitree t)
stack[++top]=s;//當前節點入棧
s=s->lchild; //左子樹進行遍歷
} if(top==-1)
s=stack[top--]; //彈出棧頂元素到s中
printf("%c ",s->data); //輸出當前節點元素值
s=s->rchild; //遍歷右子樹
} }
考慮33~37行的判斷,應該是不必要的。
進入此while迴圈的條件是
s!=null||top!=-1
如果s != null,那麼stack中至少有乙個節點使得top >= 0
如果s == null然而 top != -1,那麼這裡棧非空的條件自然滿足。
因此33~37行的判斷是多餘的,可以省略。
個人觀點,歡迎討論。
非遞迴中序遍歷二叉樹
非遞迴中序遍歷二叉樹 include define maxsize 100 typedef char datatype 二叉鍊錶型別定義 typedef struct binnode binnode,bintree 順序棧型別定義 typedef struct seqstk 初始化棧 int ini...
二叉樹的非遞迴中序遍歷
編寫程式建立如圖二叉樹的二叉鍊錶儲存 萌新求解 1 編寫演算法,非遞迴中序遍歷此二叉樹 2 編寫遞迴演算法,將此二叉樹左右子樹進行交換 定義二叉樹的二叉鍊錶結點結構 typedef struct node bitnode,bitree 定義順序棧 typedef struct seqstack 初始...
二叉樹的非遞迴中序遍歷
非遞迴中序遍歷類似於前序遍歷,唯一的區別是,首先要移動到結點的左子樹,成左子樹的遍歷後,再將結點出棧進行處理 void inordernonrecursive binarytreenode root llstack s newllstack while true if stack.isempty r...