手机
当前位置:查字典教程网 >编程开发 >C语言 >先序遍历二叉树的递归实现与非递归实现深入解析
先序遍历二叉树的递归实现与非递归实现深入解析
摘要:1、先序遍历二叉树递归实现思想:若二叉树为空,返回。否则1)遍历根节点;2)先序遍历左子树;3)先序遍历右子树;代码:复制代码代码如下:te...

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);

}

}

【先序遍历二叉树的递归实现与非递归实现深入解析】相关文章:

基于C语言指令的深入分析

全排列算法的非递归实现与递归实现的方法(C++)

对C语言中递归算法的深入解析

使用C语言递归与非递归实现字符串反转函数char *reverse(char *str)的方法

内部排序之堆排序的实现详解

二维指针动态分配内存连续问题深入分析

关于大小端、位域的一些概念详解

C++产生随机数的实现代码

c语言实现二叉查找树实例方法

C 二分查找 递归与非递归的实现代码

精品推荐
分类导航