二叉树的先序遍历,递归实现与循环实现

来源:互联网 发布:淘宝服装店保证金 编辑:程序博客网 时间:2024/04/29 20:53

二叉树的遍历分为先序遍历,中序遍历,后序遍历。

这三个遍历的递归实现十分简单。

这是我的一篇博文,关于创建树

现在我先说说先序遍历。

先序就是按照最优先顺序,遍历就是沿一定路径​经过路径上所有的节点。在二叉树中,以左为先。


为了分离访问的操作,定义

typedef void (*PVisitFun)(TreeNode*) ;
void Visit(TreeNode* node){cout<<node->data;}

递归实现

源代码:

void PreOrderVisitR(TreeNode* root,PVisitFun pvisit){if(root == NULL)return;pvisit(root);PreOrderVisitR(root->plc,pvisit);PreOrderVisitR(root->prc,pvisit);}

循环实现
考虑到右节点后于左节点展开,所以我用栈现存放右节点的信息,在存放左节点,然后取栈顶元素重复以上操作,则可以得到先序的遍历序列。

void PreOrderVisitI(TreeNode* root, PVisitFun pvisit){stack<TreeNode*> visitStack;visitStack.push(root);TreeNode* pcurt = NULL;while ( !visitStack.empty() ){pcurt = visitStack.top();visitStack.pop();cout<<pcurt->data;if (pcurt->prc != NULL){visitStack.push(pcurt->prc);}if (pcurt->plc != NULL){visitStack.push(pcurt->plc);}}}



1 0