日落and日出 2021-04-25 22:21 采纳率: 100%
浏览 28
已采纳

为什么二叉树的父节点输出为空?

在二叉树中查找某个节点值,如果找到,返回该节点的父节点,否则返回空。以下为代码:

#include<iostream>

#include<string.h>

using namespace std;

 

#define maxsize 100

#define OK 1

#define ERROR 0

#define OVERFLOW -2

 

// char ch;

typedef char TElemType;

/*二叉链表*/

typedef struct BiTNode//创建一个结构体作为二叉树

{

TElemType data;//结点数据域

BiTNode* lchild, * rchild;//左右孩子指针

}BiTNode, * BiTree;

 

void initBiTree(BiTree& T)//二叉树的初始化

{

T = NULL;//二叉树置为空

}

 

void CreateBiTree(BiTree& T)

{//按先序次序输入二叉树的结点值(一个字符),创建二叉链表表示的二叉树T

char ch;

cin >> ch; //扫描字符序列,读入字符ch

if (ch == '#') T = NULL; //递归结束,建空树,输入了n个字符,就要有n+1个#

else //递归创建二叉树

{

T = new BiTNode; //生成根结点

T->data = ch; //根结点数据域置为ch

CreateBiTree(T->lchild);//递归创建左子树

CreateBiTree(T->rchild);//递归创建右子树

}

}

 

BiTree h;

BiTree Search(BiTree& T, char& a)//查找函数

{

if (T)

{

if (T->data == a)

{

cout << "查找成功(根结点):" << " " << T->data << endl;

return T;

}

else if (T->lchild != NULL && T->lchild->data == a&& T->data != '#')

{

cout << "成功查找父结点:" << " " << T->data << endl;

return T;

}

else if (T->rchild != NULL && T->rchild->data == a&&T->data!='#')

{

cout << "成功查找父结点:" << " " << T->data << endl;

return T;

}

h = Search(T->lchild, a);

if (T->rchild)

{

Search(T->rchild, a);

}

}

int main()

{

//int a, b;

BiTree t;//建一个树t

initBiTree(t);//初始化t

 

cout << "输入一个二叉树(#代表空):" << endl;

CreateBiTree(t);//创建二叉树t

 

char n = 'E';

//cin >> n;

//cout << n;

cout << endl;

cout << "若输出值只有一个,那么查找值为根结点,否则输出父结点:" << endl;

Search(t, n);//查找n

BiTree m;

m = Search(t, n);

cout << "输出" << m->data;

return 0;

}

  • 写回答

2条回答 默认 最新

  • 日落and日出 2021-04-29 19:28
    关注

    我这几天已经弄了出来,可以将search函数改为如下:

    BiTree getparent(BiTree T, char& a)
    {
    
    	if (T == nullptr)return T;
    	if (T->rchild != NULL) { if (T->rchild->data == a)return T; }
    	if (T->lchild != NULL) { if (T->lchild->data == a)return T; }
    	BiTree left = getparent(T->lchild, a);
    	if (left != NULL)return left;
    	BiTree right = getparent(T->rchild, a);
    	if (right != NULL)  return right;
    	return left;
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 目详情-五一模拟赛详情页
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line