1 2 3 4 5 6 7 8
|
struct BiTreeNode { int data; BiTreeNode *lchild; BiTreeNode *rchild; };
|
递归算法
1 2 3 4 5 6 7 8 9 10 11 12
|
void PreOrderTraverse(BiTreeNode *T) { if (T) { Visit(T->data); PreOrderTraverse(T->lchild); PreOrderTraverse(T->rchild); } }
|
1 2 3 4 5 6 7 8 9 10
|
void InOrderTraverse(BiTreeNode *T) { if (T) { InOrderTraverse(T->lchild); Visit(T->data); InOrderTraverse(T->rchild); } }
|
1 2 3 4 5 6 7 8 9 10
|
void PostOrderTraverse(BiTreeNode *T) { if (T) { PostOrderTraverse(T->lchild); PostOrderTraverse(T->rchild); Visit(T->data); } }
|
非递归算法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
void PreOrderTraverse(BiTreeNode *T) { stack<BiTreeNode *> s; BiTreeNode *p = T; while (p || !s.empty()) { if (p) { Visit(p->data); s.push(p); p = p->lchild; } else { p = s.top(); s.pop(); p = p->rchild; } } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
void InOrderTraverse(BiTreeNode *T) { stack<BiTreeNode *> s; BiTreeNode *p = T; while (p || !s.empty()) { if (p) { s.push(p); p = p->lchild; } else { p = s.top(); s.pop(); Visit(p->data); p = p->rchild; } } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
void PostOrderTraverse(BiTreeNode *T) { stack<BiTreeNode *> s; BiTreeNode *p = T, *r = NULL; while (p || !s.empty()) { if (p) { s.push(p); p = p->lchild; } else { p = s.top(); if (p->rchild && p->rchild != r) { p = p->rchild; s.push(p); p = p->lchild; } else { p = s.top(); s.pop(); Visit(p->data); r = p; p = NULL; } } } }
|
参考文献:
严蔚敏, 吴伟民. 数据结构(C语言版). 清华大学出版社.
王道论坛. 程序员求职宝典. 电子工业出版社.