7-31 二叉树查找结点及父结点
编写程序在二叉树中查找给定结点及父结点。二叉树结点的数据域值不等于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 二叉树查找结点及父结点相关推荐
- 将森林转换为对应的二叉树,若在二叉树中,结点u时结点v的父结点的父结点,则在原来的森林中,u和v可能具有的关系是( )
将森林转换为对应的二叉树,若在二叉树中,结点u时结点v的父结点的父结点,则在原来的森林中,u和v可能具有的关系是( ① ② ) ① 父子关系 ② 兄弟关系 ③ u的父结点与v的父结点是兄弟关系 森林与 ...
- 求树中某结点的父结点(长子-兄弟表示法)
数据结构: struct CSNode; typedef struct CSNode * PCSNode; struct CSNode { DataType info; PCSNode lchild; ...
- 二叉树查找结点c语言_二叉树操作详解
(给C语言与CPP编程加星标,提升C/C++技能) 来源:https://segmentfault.com/a/1190000008850005 [导读]:树是数据结构中的重中之重,尤其以各类二叉树为 ...
- 程序员面试题精选100题(48)-二叉树两结点的最低共同父结点[数据结构]
题目:二叉树的结点定义如下: struct TreeNode { int m_nvalue; TreeNode* m_pLeft; TreeNode* m_pRight; }; 输入二叉树中的两个结点 ...
- 程序员面试100题之五:二叉树两个结点的最低共同父结点
题目:二叉树的结点定义如下: struct TreeNode { int m_nvalue; TreeNode* m_pLeft; TreeNode* m_pRight; }; 输入二叉树中的两个结点 ...
- [c++]查找二叉树根节点到任意结点的路径
今天在做leetcode236时受到启发,怎么求二叉树根节点到二叉树任意结点(该节点在二叉树中存在)的路径?当然,前提是二叉树各节点的值不相等. 示例 输入:root = [3,5,1,6,2,0,8 ...
- 二叉树两个结点的最低公共父结点 【微软面试100题 第七十五题】
题目要求: 输入二叉树中的两个结点,输出这两个及诶单在数中最低的共同父结点. 题目分析: 还有一种情况:如果输入的两个结点中有一个或两个结点不在二叉树中,则输出没有共同父结点: 因此,可以在程序中定义 ...
- 线索二叉树(基于链表存储树结点)
有以下场景 如果使用中序遍历,那么得到的顺序是:HDIBEAFCG,可以得知A的前驱结点为E,后继结点为F.但是,这种关系的获得是建立在完成遍历后得到的.如果我们每次想得到某个节点的前驱或者后继,都要 ...
- 二叉树中找两个结点的最近公共祖先结点
一.搜索二叉树:第一变种是二叉树是一种特殊的二叉树:查找二叉树.也就是树是排序过的,位于左子树上的结点都比父结点小,而位于右子树的结点都比父结点大.我们只需要从根结点开始和两个结点进行比较.如果当前结 ...
最新文章
- WorkFlow For Net ! NET 平台工作流 或 BPM
- 动态链接库的编写与调用
- (*p)++和*(p++)和*p++的区别
- 试题 基础练习 回文数
- 2小时撸完代码之后,所有程序员都逃不过的一天... (强共鸣)
- Qt phonon多媒体框架(转)
- 会员连锁配置以及金额走向
- The type sun.management.ManagementFactory is not visible
- ubuntu下查看window下文本文件乱码的解决方法
- 从数组到 HashMap 之算法解释
- umijs 修改默认配置_UmiJS基础教程(2) 目录结构
- 在线hash密码破解网站列表
- 运维危险操作之windows server打开或关闭windows功能
- Leo的怯懦,由3000块钱而起的故事(3)大结局
- matlab心碎的心,让人撕心裂肺的心痛网名,心碎绝望的伤感昵称
- 提取文字的三种方法你知道吗?
- anz的swift code_澳洲Commonwealth bank是不是只有一个SWIFT CODE?
- 门禁系统一定要服务器吗,门禁系统服务器功能配置
- 【测试分析】KYM全面收集测试信息
- TCPcopy使用示例