看完数据结构二叉树部分后,通过学习书上的伪代码以及其他人的代码自己动手实现了一下,采用前序方式创建一颗二叉树,实现了前中后层四种遍历方式。

在层序遍历部分与前三种遍历不同,层序遍历采用从根节点开始从上到下逐层遍历,所以借助队列来实现,开始遍历后,将根节点先压入队列,然后将左右孩子逐次压入,然后先进先出,将front元素pop出来。

下面是代码

//头文件声明各成员函数
struct BiNode   //构造树节点
{
public:
	char nodeData;
	BiNode *lchild, *rchild;
};

class Tree    
{
public:
	
	BiNode* create_node(const int &level,const string &pos);     //创建一个树节点
	void PreOrder(BiNode *t);      //前序
	void InOrder(BiNode *t);       //中序
	void PostOrder(BiNode *t);     //后序
	void LevelOrder(BiNode *t);     //层序
	BiNode *root;                   //根节点
};

#include<queue>
//实现函数
BiNode* Tree::create_node(const int &level,const string &pos)
{
	char data;
	BiNode *node;
	cout << "请输入数据:层数:" << level << "位置" << pos << endl;
	cin >> data;
	if (data == '0')
	{
		node = nullptr;
		return node;
		
	}
	else{
		node = new BiNode;
		node->nodeData = data;
		node->lchild = create_node(level + 1, "left");
		node->rchild = create_node(level + 1, "right");
		return node;
	}
	
}

void Tree::PreOrder(BiNode *T)
{
	if (T == nullptr)
	{
		return;
	}
	cout << T->nodeData << " ";
	PreOrder(T->lchild);
	PreOrder(T->rchild);
}

void Tree::InOrder(BiNode *T)
{
	if (T == nullptr)
	{
		return;
	}
	InOrder(T->lchild);
	cout << T->nodeData<<" ";
	InOrder(T->rchild);
}

void Tree::PostOrder(BiNode *T)
{
	if (T == nullptr)
	{
		return;
	}
	PostOrder(T->lchild);
	PostOrder(T->rchild);
	cout << T->nodeData<<" ";

}
void Tree::LevelOrder(BiNode *T)
{
	queue<BiNode*> q;          //注意头文件的引用,采用了c++内部封装的queue容器,队列的        
    BiNode *p = new BiNode;    //各个成员函数都封装完成
	if (T == nullptr)
	{
		return;
	}
	q.push(T);
	while (!q.empty())
	{
		p = q.front();
		cout << p->nodeData<<" ";
		q.pop();
		if (p->lchild)
		{
			q.push(p->lchild);
		}
		if (p->rchild)
		{
			q.push(p->rchild);
		}
	}
}

主函数调用

int main()
{
	Tree T;
	int level = 1;
	T.root = T.create_node(level, "root");
	cout << "前序遍历" << endl;
	T.PreOrder(T.root);
	cout << endl<< "中序遍历" << endl;
	T.InOrder(T.root);
	cout <<endl<< "后序遍历" << endl;
	T.PostOrder(T.root);
	cout << endl<<"层序遍历" << endl;
	T.LevelOrder(T.root);
	system("pause");
	return 0;
}

运行结果:

C++实现二叉树创建、前序、中序、后序、层序遍历

C++实现二叉树创建、前序、中序、后序、层序遍历

相关文章:

  • 2022-02-07
  • 2021-12-25
  • 2021-12-25
  • 2022-02-07
  • 2021-12-15
  • 2021-08-07
猜你喜欢
  • 2021-12-25
  • 2021-04-26
  • 2021-08-09
  • 2022-02-07
  • 2022-12-23
  • 2022-02-07
  • 2021-10-17
相关资源
相似解决方案