日落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条)

报告相同问题?

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效