源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

先序遍历二叉树的递归实现与非递归实现深入解析

  • 时间:2020-12-20 12:22 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:先序遍历二叉树的递归实现与非递归实现深入解析
[b]1、先序遍历二叉树  递归实现 [/b]思想:若二叉树为空,返回。否则 1)遍历根节点; 2)先序遍历左子树; 3)先序遍历右子树; [b]代码: [/b]
[u]复制代码[/u] 代码如下:
template<typename elemType> void PreOrder(nodeType<elemType> *root)  {      if(root==NULL)          return ;      visit(root->data); // visit the data     PreOrder(root->lchild); //递归调用,先序遍历左子树      PreOrder(root->rchild); //递归调用,先序遍历右子树  } 
[b]2、先序遍历二叉树 非递归实现 [/b]思想:二叉树的非递归先序遍历,先序遍历思想:先让根进栈,只要栈不为空,就可以做弹出操作, 每次弹出一个结点,记得把它的左右结点都进栈,记得右子树先进栈,这样可以保证右子树在栈中总处于左子树的下面。 前序遍历二叉树的非递归算法思想 建立栈 Stack; t 指向根; 当 t 不空 或 Stack 不空时反复做:       若 t 不空,访问t,t 入 栈;t 指向左子女;       否则:出栈顶元素到 t 中;       t 指向右子女; 结束
[u]复制代码[/u] 代码如下:
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);      }  } 
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部