本文**
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef int elemtype;
#define nullptr null
typedef struct _treenode treenode, *searchbtree;
typedef searchbtree stackelemtype;
typedef struct stacknode *stack;
void initstack(stack st) // 初始化棧,把頭節點看作是棧頂
int isempty(stack st)
void push(stack st, searchbtree x) // 每次從將元素插入到頭節點的位置,頭節點上移
void pop(stack st) // 出棧
searchbtree gettop(stack st)
searchbtree emptytree(searchbtree t) // 初始化、構造一顆空樹/銷毀一顆樹
return nullptr;
}void insert(searchbtree &t, elemtype x)
else
}void preorderprint(searchbtree t) // 先序根(序)遍歷二叉樹並列印出結點值
stack s = new stacknode; // 借助棧來實現
initstack(s);
treenode* pt = t; // 建立臨時結點指向根節點
while (pt || !isempty(s)) // 當結點不為空或者棧不為空執行迴圈
else
}cout << endl;
delete s;
}void inorderprint(searchbtree t) // 中根(序)遍歷二叉樹並列印出結點值
stack s = new stacknode; // 借助棧來實現
initstack(s);
treenode* pt = t; // 建立臨時結點指向根節點
while (pt || !isempty(s)) // 當結點不為空或者棧不為空執行迴圈
else
}cout << endl;
delete s;
}void postorderprint(searchbtree t) // 先根(序)遍歷二叉樹並列印出結點值
stack s = new stacknode; // 借助棧來實現
initstack(s);
treenode* pt = t; // 建立臨時結點指向根節點
treenode* qt = nullptr;
while (pt || !isempty(s)) // 當結點不為空或者棧不為空執行迴圈
else
else
// 當左孩子及根結點遍歷完之後,開始遍歷其右子樹}}
cout << endl;
delete s;
}int main()
;searchbtree mytree = new treenode;
mytree = emptytree(mytree); // 初始化樹
for (int i = 0;i < sizeof(rawdata) / sizeof(elemtype);i++)
cout << "the inorder print of the tree is: \n";
inorderprint(mytree);
cout << "the preorder print of the tree is: \n";
preorderprint(mytree);
cout << "the postorder print of the tree is: \n";
postorderprint(mytree);
delete mytree;
system("pause");
return 0;
}
中根非遞迴遍歷二叉樹
在先根非遞迴中,根入棧後彈出,訪問,右孩子與左孩子進棧,順序很清楚。但是中根非遞迴與後根非遞迴中,根入棧後如果彈出不能訪問,這是乙個困惑的地方。為了更明晰地,更統一3種非遞迴設計思路。均可以採用入棧,彈出,左右子樹入棧這種基本步驟。每個步驟需要仔細在紙上演示設計。由於乙個節點出棧後還要進棧,該節點再...
二叉樹 非遞迴遍歷(先 中 後)
include include include define maxsize 20 最多結點個數 using namespace std 二叉鍊錶 typedef struct bnodebnode,btree 順序棧 typedef btree datatype typedef structseq...
二叉樹非遞迴先序遍歷
二叉樹的遞迴先序遍歷很簡單,假設二叉樹的結點定義如下 1 struct binarytreenode 2 遞迴先序遵循 根 左 右的順序 1 void preorder binarytreenode root 2非遞迴我們以乙個例子說明,仍然以之前博文的乙個二叉樹說明 1 82 36 104 55 ...