C++ 关于数据结构的问题

mzcs5431 2010-06-07 03:46:04
已知一颗二叉树用二叉链表表示,其根指针为t,设计一个算法,从根节点开始按层次遍历二叉树,同层的节点从右到左的次序访问。
用C++编写
...全文
97 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenzhuolin1002 2010-06-07
  • 打赏
  • 举报
回复

#include "stdafx.h"
#include "iostream"
#include "queue"
#include "windows.h"
using namespace std;

struct TreeNode
{
char data;
TreeNode *leftNode;
TreeNode *rightNode;
};

typedef TreeNode* TreeRoot;
//先序建立
void createTree(TreeRoot *p)
{
char ch;
cout<<"please input a data:"<<endl;
cin>>ch;
if(ch == ';')
{
(*p) = NULL;
return;
}
*p = new TreeNode();
(*p)->data = ch;
createTree(&(*p)->leftNode);
createTree(&(*p)->rightNode);
}
//前序输出,调试用
void showTree(TreeNode *p)
{
if(p != NULL)
{
cout<<p->data<<endl;
showTree(p->leftNode);
showTree(p->rightNode);
}
}

void main()
{
TreeRoot *root = new TreeRoot();
createTree(root);
//showTree(*root);
TreeNode *p;
p = *root;
queue<TreeNode*> q;
q.push(p);
while (p->leftNode != NULL || p->rightNode != NULL)
{
if (q.empty())
{
return;
}
p = q.front();
q.pop();
cout<<p->data<<" ";
if (p->rightNode != NULL)
{
q.push(p->rightNode);
}
if(p->leftNode != NULL)
{
q.push(p->leftNode);
}

}

system("pause");
}
chenzhuolin1002 2010-06-07
  • 打赏
  • 举报
回复
对呀 ,使用队列就对了
na2650945 2010-06-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cattycat 的回复:]

就是二叉树的按层遍历,只不过从右向左了,先把右孩子节点压入队列即可。
[/Quote]
正解。
cattycat 2010-06-07
  • 打赏
  • 举报
回复
就是二叉树的按层遍历,只不过从右向左了,先把右孩子节点压入队列即可。
星光伴月 2010-06-07
  • 打赏
  • 举报
回复
void visit(BT* bt)
{
if(bt->right) visit(bt->right);
if(bt->left) visit(bt->left);
...
}
ForestDB 2010-06-07
  • 打赏
  • 举报
回复
帮顶。

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧