二叉樹的非遞迴中序遍歷

2021-06-16 17:02:13 字數 679 閱讀 3937

最近在溫習資料結構,通常網上看到的二叉樹非遞迴中序遍歷如以下形式(

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