展会信息港展会大全

先序遍历二叉树的递归实现与非递归实现深入解析
来源:互联网   发布日期:2016-01-19 13:03:30   浏览:1066次  

导读:以下是对先序遍历二叉树的递归实现与非递归实现进行了详细的分析介绍,需要的朋友可以过来参考下1、先序遍历二叉树 递归实现思想:若二叉树为空,返回。否则1)遍历根节点;2)先序遍历左子树;3)先序遍历右子 ...

以下是对先序遍历二叉树的递归实现与非递归实现进行了详细的分析介绍,需要的朋友可以过来参考下

1、先序遍历二叉树递归实现

思想:若二叉树为空,返回。否则

1)遍历根节点;

2)先序遍历左子树;

3)先序遍历右子树;

代码:

复制代码 代码如下:

template<typename elemType>

void PreOrder(nodeType<elemType> *root)

{

if(root==NULL)

return ;

visit(root->data); // visit the data

PreOrder(root->lchild); //递归调用,先序遍历左子树

PreOrder(root->rchild); //递归调用,先序遍历右子树

}

2、先序遍历二叉树 非递归实现

思想:二叉树的非递归先序遍历,先序遍历思想:先让根进栈,只要栈不为空,就可以做弹出操作, 每次弹出一个结点,记得把它的左右结点都进栈,记得右子树先进栈,这样可以保证右子树在栈中总处于左子树的下面。

前序遍历二叉树的非递归算法思想

建立栈 Stack;

t 指向根;

当 t 不空 或 Stack 不空时反复做:

若 t 不空,访问t,t 入 栈;t 指向左子女;

否则:出栈顶元素到 t 中;

t 指向右子女;

结束

复制代码 代码如下:

void PreOrder_Nonrecursive(BinaryTree T)//先序遍历的非递归

{

if(!T) return ;

stack<BinaryTree> s;

s.push(T);

while(!s.empty())

{

BinaryTree temp = s.top();

visit(temp->data);

s.pop();

if(temp->rchild)

s.push(temp->rchild);

if(temp->lchild)

s.push(temp->lchild);

}

}

赞助本站

人工智能实验室

相关热词: 递归 先序 遍历

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港