目录
前言
概述
接口
源码
测试函数
运行结果
往期精彩内容
前言
从前的日色变得慢,车,马,邮件都慢,一生,只够爱一个人。
概述
二叉树的层序遍历可以使用广度优先搜索(BFS)来实现。具体步骤如下:
-
创建一个队列 queue,并将根节点入队。
-
当队列不为空时,重复执行以下步骤:
a. 弹出队头元素,并访问该节点。
b. 如果该节点有左子节点,则将其左子节点入队。
c. 如果该节点有右子节点,则将其右子节点入队。
-
当队列为空时,说明已经遍历完整个二叉树。
以上是层序遍历的基本思想。
现在有二叉树如下:
创建一个空的队列:根节点入队:弹出队头元素(弹出即代表访问,对该元素的操作,根据实际需求编写即可),访问该节点,此节点有两个孩子,那么B,C两个孩子入队,
入队之后,继续弹出一个元素B, 访问该节点,B节点只有一个左孩子,没有右孩子,左孩子D入队,右孩子没有,不入队。
又一次弹出元素,访问此节点,若有左右节点,则入队,否则不入队。直到队列为空, 广度优先搜索(BFS)结束。
接口
void ergodic();
源码
#include <malloc.h>
#include<string.h>
#include<iostream>
using namespace std;class BINARYTREE
{
protected:struct NODESTRUCT{char data[15];struct NODESTRUCT* lChild;struct NODESTRUCT* rChild;};struct NODESTRUCT* treeRoot=nullptr;protected:struct data{struct NODESTRUCT* nodePtr;struct data* pre, *bk;};struct data* top, *button;private:struct NODESTRUCT* getPtrOfDataNode(char* data);
private:void push(struct NODESTRUCT* nodePtr);struct NODESTRUCT* pop();
public:BINARYTREE(){//队列初始化top = button = new struct data;button->pre = nullptr;button->bk = nullptr; }void ergodic();
};
void BINARYTREE::ergodic(){NODESTRUCT* nodePtr = nullptr;if (treeRoot != nullptr){push(treeRoot);while (true){nodePtr = pop();if (nodePtr == nullptr){break;}cout << nodePtr->data << endl;if (nodePtr->lChild != nullptr){push(nodePtr->lChild);}if (nodePtr->rChild != nullptr){push(nodePtr->rChild);}}}return;
}
测试函数
#include<stdio.h>
#include<iostream>
using namespace std;
#include"BINARYTREE.h"
#include<windows.h>
int main()
{BINARYTREE binaryTree;
binaryTree.initTree();
binaryTree.addLChild("A", "B");
binaryTree.addRChild("A", "C");
binaryTree.addLChild("B", "D");
binaryTree.addLChild("C", "E");
binaryTree.addRChild("C", "F");
binaryTree.ergodic();system("pause");
return 0;
}
运行结果
往期精彩内容
数据结构第十二天(队列)