如何建立中序线索二叉树,我调了很长时间了,可是不知道哪里出错了,请大侠帮忙!

论坛 期权论坛 期权     
匿名   2018-4-26 13:46   3832   4
题目描述:
采用先序法建立一棵二叉树,然后建立这棵二叉树的中序线索二叉树,线索二叉树的描述如下:
每个结点包括5个域,分别存储结点的值、标记位、结点的左右子树指针或者结点的前趋和后继(取决于标记位的值)。
如果ltag值为0,表示lchild指向结点的左...题目描述:
采用先序法建立一棵二叉树,然后建立这棵二叉树的中序线索二叉树,线索二叉树的描述如下:
每个结点包括5个域,分别存储结点的值、标记位、结点的左右子树指针或者结点的前趋和后继(取决于标记位的值)。
如果ltag值为0,表示lchild指向结点的左孩子,如果ltag=1,表示lchild结点指向结点的前驱;如果rtag=0,表示rchild指向结点的右孩子,如果rtag=1,表示rchild指向结点的后继。
要求输入一个先序创建二叉树所需要的先序序列,按照中序方式输出该二叉树所对应的线索二叉树的每个结点,包括它的ltag,data,rtag三个域的值。二叉树的数据域类型为字符型,扩展二叉树的叶子结点用‘#’表示。--------------------------------------------------------------------------------输入样例:
A B # # C D # E # F # # G H # I K # # # #
--------------------------------------------------------------------------------
输出样例:
1 B 1
0 A 0
1 D 0
1 E 0
1 F 1
0 C 0
1 H 0
1 K 1
0 I 1
0 G 1
--------------------------------------------------------------------------------
输入描述:
输入一棵扩展二叉树的先序遍历序列,共用一行,直接输入某二叉树的加了叶子结点的扩展二叉树字符序列,以空格隔开。
--------------------------------------------------------------------------------
输出描述:
输出中序遍历的该二叉树所对应线索二叉树的每个结点,包括它的ltag,data,rtag域,输出格式为每行一个结点,数据之间以空格隔开。
我的代码:#include
using namespace std;
struct Node
{
char data;
Node *lchild;
Node *rchild;
int ltag;
int rtag;
};
class Tree
{
public:
Tree();
~Tree(){}
Node *Next(Node *p);
void Inorder();
private:
Node *root;
Node *Creat(Node *bt);
void ThrBi(Node *bt, Node *pre);
};
Tree::Tree()
{
Node *pre;
root = Creat(root);
pre = NULL;
ThrBi(root, pre);
}
Node *Tree::Creat(Node *bt)
{
char x;

cin >> x;
if(x=='#')
{
  bt = NULL;
}
else
{
  bt = new Node;
  bt->data = x;
  bt->ltag = 0;
  bt->rtag = 0;
  bt->lchild = Creat(bt->lchild);
  bt->rchild = Creat(bt->rchild);
}
return bt;
}

void Tree::ThrBi(Node *bt, Node *pre)
{
if(bt==NULL)
{
  return;
}

ThrBi(bt->lchild, pre);

if(bt->lchild==NULL)
{
  bt->ltag = 1;
  bt->lchild = pre;
}

if(bt->rchild==NULL)
{
  bt->rtag = 1;
}

if((pre!=NULL)&&(pre->rtag==1))
{
  pre->rchild = bt;
}

pre = bt;

ThrBi(bt->rchild, pre);

}
Node *Tree::Next(Node *p)
{
Node *q;
if(p->rtag==1)
{
  q = p->rchild;
}
else
{
  q = p->rchild;

  while(q->ltag==0)
  {
   q = q->lchild;
  }
}
return q;
}
void Tree::Inorder()
{
Node *p;
if(root==NULL)
{
  return;
}
else
{
  p = root;
  while(p->ltag==0)
  {
   p = p->lchild;
  }
  cout ltag
分享到 :
0 人收藏

4 个回复

倒序浏览
2#
626845897  4级常客 | 2018-4-30 02:07:01
麻烦你下个注释,ThrBi是想做什么
3#
热心网友  15级至尊 | 2018-4-30 02:07:02

◎白话解:说话时要顾虑到能不能做到,做事时也要顾虑到与自己所说的话,是不是一致,君子何不努力笃行实践,做到言行合一呢? 北京故宫南北长961米,东西宽753米,面积约为725000平方米。四周为宽52米的护城河。城墙高12米,底厚10米,顶厚6米至7米。有四门,正南为午门,东为东华门,西为西华门,北为玄武门(神武门)。现玄武门为故宫博物院正门。
4#
热心网友  15级至尊 | 2018-4-30 02:07:03

传统的山水写意画与现代的动画音像并非不能融合,中国水墨动画片的开山《小蝌蚪找妈妈》便是例证;传统的古典乐器与现代的演奏形式也并非难以交汇,女子十二乐坊的红裙飘逸即是明证。事实证明,我们不必担心传统与现代的冲突,它们的磨合会给成长带来新的惊喜。’活着是美丽的风景,   
5#
热心网友  15级至尊 | 2018-4-30 02:07:04

颠茄:多年生草本植物,叶子互生,一大一小,夏季开花,钟状,淡紫色,果实为浆果球形,成熟时黑紫色,其叶和根有毒。(吃过它的果实)3.喜怒哀乐之未发,谓之中;发而皆中节,谓之和。中也者,天下之大本也,和也者,天下之达道也。致中和,天地位焉,万物育焉。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:58388
帖子:6688
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP