標籤:style blog color ar for 資料 div 代碼 sp
//中序遍曆
int inorder_tree_walk(BinTreeNode * root){ if(root == NULL){ return -1; } stack<BinTreeNode *> s; BinTreeNode * p = root; while(!s.empty() || p != NULL) { while(p != NULL){ s.push(p); p = p->lchild; } p = s.top(); s.pop(); cout << p->key<< endl; p = p->rchild; } return 0;}
紅色的部分表示訪問元素的值,和前序走訪二叉樹相比,他們的區別僅僅在於訪問元素的位置不同
建立一個二叉樹
int insert(BinTreeNode * root, BinTreeNode * node){ if(root == NULL || node == NULL) { cout << "insert root and node should not be NULL" << endl; return -1; } BinTreeNode * p = root; while(p != NULL){ if(node->key < p->key){ if(p->lchild == NULL){ p->lchild = node; return 0; } else p = p->lchild; } else{ if(p->rchild == NULL){ p->rchild = node; return 0; } else p = p->rchild; } } return 0;}
定義的資料結構
typedef struct BinTreeNode{ int key; char * data; BinTreeNode * lchild; BinTreeNode * rchild;}BinTreeNode;typedef struct BinTree{ int size; BinTreeNode * root;}BinTree;
測試代碼
int main(){ BinTreeNode root; memset(&root, 0, sizeof(root)); root.key = 9; BinTreeNode* btn; for(int i=0; i<10; i++) { btn = (BinTreeNode *) malloc(sizeof(BinTreeNode)); memset(btn, 0, sizeof(btn)); int k = i*13155443 % 17; cout << k << " "; btn->key = k; insert(&root, btn); } cout << endl; inorder_tree_walk2(&root); return 1;}
非遞迴遍曆二叉樹之中序遍曆