编写程序在二叉树中查找给定结点及父结点。二叉树结点的数据域值不等于0的整数。

输入格式:

输入第1行为一组用空格间隔的整数,表示带空指针信息的二叉树先根序列,其中空指针用0表示。例如1 5 8 0 0 0 6 0 0表示如下图的二叉树。第2行为整数m,表示查询个数。接下来m行,每行为一个不等于0的整数K,表示要查找的结点的数据值。m不超过100,二叉树结点个数不超过150000,高度不超过6000。输入数据保证二叉树各结点数据值互不相等。

输出格式:

输出为m行,每行1个整数,表示被查找结点K的父结点数据值,若二叉树中无结点K或结点K无父结点,则输出0。

输入样例:

1 5 8 0 0 0 6 0 0
3
8
1
6

输出样例:

5
0
1

代码长度限制

16 KB

时间限制

300 ms

内存限制

20 MB

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
typedef struct TNode* Position;
typedef Position BinTree;
typedef struct TNode
{int Data;BinTree Left;BinTree Right;BinTree Father;
};
int a[15000];
int k = 0;
int flag;
void CreateTree(BinTree* BT)
{int val;scanf("%d", &val);if (val == 0)*BT = NULL;else{*BT = (BinTree)malloc(sizeof(struct TNode));(*BT)->Data = val;(*BT)->Father = NULL;CreateTree(&(*BT)->Left);CreateTree(&(*BT)->Right);}
}void CreateFatherNode(BinTree BT)
{if (BT->Left != NULL){BT->Left->Father = BT;CreateFatherNode(BT->Left);}if (BT->Right != NULL){BT->Right->Father = BT;CreateFatherNode(BT->Right);}
}int  PreorderTraversal(BinTree BT, int n)
{int p;if (BT->Data == n){flag = 1;if (BT->Father == NULL){a[k] = 0;k++;}else{p = (BT->Father->Data);a[k] = p;k++;}return flag;}if (BT->Left != NULL && flag == 0){PreorderTraversal(BT->Left, n);}if (BT->Right != NULL && flag == 0)PreorderTraversal(BT->Right, n);
}int main()
{BinTree BT;int m, i, j, n;BT = (BinTree)malloc(sizeof(struct TNode));CreateTree(&BT);CreateFatherNode(BT);scanf("%d", &m);if (m <= 100){for (i = 0; i < m; i++){flag = 0;scanf("%d", &n);PreorderTraversal(BT, n);if (flag == 0){a[k] = 0;k++;}}for (j = 0; j < k; j++)printf("%d\n", a[j]);}return 0;
}

7-31 二叉树查找结点及父结点相关推荐

  1. 将森林转换为对应的二叉树,若在二叉树中,结点u时结点v的父结点的父结点,则在原来的森林中,u和v可能具有的关系是( )

    将森林转换为对应的二叉树,若在二叉树中,结点u时结点v的父结点的父结点,则在原来的森林中,u和v可能具有的关系是( ① ② ) ① 父子关系 ② 兄弟关系 ③ u的父结点与v的父结点是兄弟关系 森林与 ...

  2. 求树中某结点的父结点(长子-兄弟表示法)

    数据结构: struct CSNode; typedef struct CSNode * PCSNode; struct CSNode { DataType info; PCSNode lchild; ...

  3. 二叉树查找结点c语言_二叉树操作详解

    (给C语言与CPP编程加星标,提升C/C++技能) 来源:https://segmentfault.com/a/1190000008850005 [导读]:树是数据结构中的重中之重,尤其以各类二叉树为 ...

  4. 程序员面试题精选100题(48)-二叉树两结点的最低共同父结点[数据结构]

    题目:二叉树的结点定义如下: struct TreeNode { int m_nvalue; TreeNode* m_pLeft; TreeNode* m_pRight; }; 输入二叉树中的两个结点 ...

  5. 程序员面试100题之五:二叉树两个结点的最低共同父结点

    题目:二叉树的结点定义如下: struct TreeNode { int m_nvalue; TreeNode* m_pLeft; TreeNode* m_pRight; }; 输入二叉树中的两个结点 ...

  6. [c++]查找二叉树根节点到任意结点的路径

    今天在做leetcode236时受到启发,怎么求二叉树根节点到二叉树任意结点(该节点在二叉树中存在)的路径?当然,前提是二叉树各节点的值不相等. 示例 输入:root = [3,5,1,6,2,0,8 ...

  7. 二叉树两个结点的最低公共父结点 【微软面试100题 第七十五题】

    题目要求: 输入二叉树中的两个结点,输出这两个及诶单在数中最低的共同父结点. 题目分析: 还有一种情况:如果输入的两个结点中有一个或两个结点不在二叉树中,则输出没有共同父结点: 因此,可以在程序中定义 ...

  8. 线索二叉树(基于链表存储树结点)

    有以下场景 如果使用中序遍历,那么得到的顺序是:HDIBEAFCG,可以得知A的前驱结点为E,后继结点为F.但是,这种关系的获得是建立在完成遍历后得到的.如果我们每次想得到某个节点的前驱或者后继,都要 ...

  9. 二叉树中找两个结点的最近公共祖先结点

    一.搜索二叉树:第一变种是二叉树是一种特殊的二叉树:查找二叉树.也就是树是排序过的,位于左子树上的结点都比父结点小,而位于右子树的结点都比父结点大.我们只需要从根结点开始和两个结点进行比较.如果当前结 ...

最新文章

  1. WorkFlow For Net ! NET 平台工作流 或 BPM
  2. 动态链接库的编写与调用
  3. (*p)++和*(p++)和*p++的区别
  4. 试题 基础练习 回文数
  5. 2小时撸完代码之后,所有程序员都逃不过的一天... (强共鸣)
  6. Qt phonon多媒体框架(转)
  7. 会员连锁配置以及金额走向
  8. The type sun.management.ManagementFactory is not visible
  9. ubuntu下查看window下文本文件乱码的解决方法
  10. 从数组到 HashMap 之算法解释
  11. umijs 修改默认配置_UmiJS基础教程(2) 目录结构
  12. 在线hash密码破解网站列表
  13. 运维危险操作之windows server打开或关闭windows功能
  14. Leo的怯懦,由3000块钱而起的故事(3)大结局
  15. matlab心碎的心,让人撕心裂肺的心痛网名,心碎绝望的伤感昵称
  16. 提取文字的三种方法你知道吗?
  17. anz的swift code_澳洲Commonwealth bank是不是只有一个SWIFT CODE?
  18. 门禁系统一定要服务器吗,门禁系统服务器功能配置
  19. 【测试分析】KYM全面收集测试信息
  20. TCPcopy使用示例

热门文章

  1. iOS端SHA256加密
  2. 程序化的思维与一通百通,一切语言都是纸老虎
  3. 缓存雪崩 缓存击穿 缓存雪崩出现原因及解决方案
  4. 你真的了解接口测试吗?
  5. linux 解压文件夹下所有zip文件
  6. 小度wifi启动提示应用程序错误
  7. 【疑难解决】EasyNVR启动时输出乱码是什么原因导致的,该如何解决?
  8. 蓝色映象 幻舞少女之剑 BLUE REFLECTION 后感
  9. 机器学习:决策树算法(ID3算法)的理解与实现
  10. Windows漏洞十年未修复,3CX供应链攻击影响全球60多万家企业