C++非递归队列实现二叉树的广度优先遍历_C 语言

本文实例讲述了C++非递归队列实现二叉树的广度优先遍历。分享给大家供大家参考。具体如下:

广度优先非递归二叉树遍历(或者说层次遍历):

void widthFirstTraverse(TNode* root) {
  queue<TNode*> q;   // 队列
  q.enqueue(root);
  TNode* p;
  while(q.hasElement()) {
   p = q.dequeue();  // 队首元素出队列
   visit(p);     // 访问p结点
   if(p->left)
     q.enqueue(p->left);
   if(p->right)
     q.enqueue(p->right);
  }
}

附带两个相关示例:

1. 递归先序遍历二叉树

void preTraverse(TNode* root) {
  if(!root)
   return;
  visit(root);
  preTraverse(root->left);
  preTraverse(root->Right);
}

2. 非递归先序遍历二叉树

void preTraverseNonRecursive(TNode* root) {
  stack<TNode> stack;  // 栈
  stack.push(root);
  TNode* p;
  while(!stack.isEmpty()) { // 栈非空
   p = stack.pop();
   visit(p);
   if(p->pRight)
     s.push(p->pRight);
   if(p->pLeft)
     s.push(p->pLeft);
  }
}

希望本文所述对大家的C++程序设计有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c++
, 遍历
, 二叉树
, 队列
, 非递归
广度优先
二叉树广度遍历、二叉树的广度优先遍历、广度优先遍历二叉树、二叉树广度遍历 java、二叉树的广度深度遍历,以便于您获取更多的相关知识。

时间: 2024-08-29 12:26:43

C++非递归队列实现二叉树的广度优先遍历_C 语言的相关文章

二叉树的广度优先遍历算法递归方式实现

问题描述 如题,二叉树的广度优先遍历算法非递归方式的实现是使用队列,依次把每层节点放入队列,在出队,那么能不能用递归方式实现二叉树的广度优先遍历算法呢? 解决方案

【算法导论】二叉树的广度优先遍历

二叉树的广度优先遍历 广度优先遍历:又称按层次遍历,也就是先遍历二叉树的第一层节点,然后遍历第二层节点--最后遍历最下层节点.而对每一层的遍历是按照从左至右的方式进行的. 基本思想:按照广度优先遍历的方式,上一层中先被访问的节点,它的下层孩子也必然先被访问,因此在算法实现时,需要使用一个队列.在遍历进行之前先把二叉树的根结点的存储地址入队,然后依次从队列中出队结点的存储地址,每出队一个结点的存储地址则对该结点进行访问,然后依次将该结点的左孩子和右孩子的存储地址入队,如此反复,直到队空为止. 具体

递归和非递归方式实现二叉树的建立和遍历

#include<stdio.h> #include<stdlib.h> #define MAXSIZE 20 typedef struct BiTnode{ char data; struct BiTnode *lchild,*rchild; }BiTnode,*BiTree; int i = 0; BiTree Create(BiTree t,char s[]) { char ch; ch = s[i++]; if(ch == ' ') { t = NULL; } else {

深入理解二叉树的非递归遍历_C 语言

二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁.而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现.在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说要难一点.一.前序遍历前序遍历按照"根结点-左孩子-右孩子"的顺序进行访问.1.递归实现 复制代码 代码如下: void preO

非递归先序-C++先序遍历非递归算法,可以进栈,不能出栈

问题描述 C++先序遍历非递归算法,可以进栈,不能出栈 #include #include #include"BinaryTree.h" using namespace std; const int stackIncreament = 20; //栈溢出时扩展空间增量 template class SeqStack{ public: int top; SeqStack(int sz=50); //建立一个空栈 ~SeqStack(){delete[] elements;} void p

非递归方式创建二叉树

好长时间没摸过二叉树了,纯属练手 我发现功能描述发布出来就乱了,还是贴图吧 #include <iostream> using namespace std; #define Type char #define MAX_BUFF 30 #define INC_BUFF 20 typedef struct _TreeNode { Type data; struct _TreeNode *lchild; struct _TreeNode *rchild; }TreeNode; TreeNode *c

C++递归线性阵列搜索数字的方法_C 语言

本文实例讲述了C++递归线性阵列搜索数字的方法.分享给大家供大家参考.具体如下: 这里采用递归方法搜索阵列的数字,发现返回index,未发现范围a -1. 复制代码 代码如下: int searchArray(int arr[], const int size, const int num, int index = 0) {     if(index >= size - 1) { return -1; }     return arr[index] == num ? index : search

纯C语言:递归二进制转十进制源码分享_C 语言

复制代码 代码如下: #include<stdio.h>#include<math.h>int change(int n,int *sum,int *m)//n为第n位,m总位数{    char c;    if(c!='#')    {        *m=*m+1;        change(n+1,sum,m);    }    if(c=='#')    {        return *sum=int(*sum+pow(2,*m-n));    }}void main

中序遍历二叉树-二叉树的非递归操作。。

问题描述 二叉树的非递归操作.. 如何用栈实现二叉树的非递归操作,越详细越好,谢谢各位啦.一定要详细哦 解决方案 void inOrder2(BinTree *root) //非递归中序遍历 { stack<BinTree*> s; BinTree *p=root; while(p!=NULL||!s.empty()) { while(p!=NULL) { s.push(p); p=p->lchild; } if(!s.empty()) { p=s.top(); cout<<