查找二叉树(tree_a)

查找二叉树(tree_a)

连接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1367
时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

已知一棵二叉树用邻接表结构存储,中序查找二叉树中值为x的结点,并指出是第几个结点。例:如图二叉树的数据文件的数据格式如下:

【输入】

第一行n为二叉树的结点个树,n<=100;第二行x表示要查找的结点的值;以下第一列数据是各结点的值,第二列数据是左儿子结点编号,第三列数据是右儿子结点编号。

【输出】

一个数即查找的结点编号。

【输入样例】

7
15
5 2 3
12 4 5
10 0 0
29 0 0
15 6 7
8 0 0
23 0 0

【输出样例】

4
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 105;
struct node{
    int data,l,r;
}p[maxn];
int d[maxn];
int n,x;
int t,ans;
void rec(int k)
{

    if(p[k].data==x)ans=k;
    if(p[k].l)rec(p[k].l);
    d[k]=++t;
    if(p[k].r)rec(p[k].r);
}
int main()
{

    cin>>n>>x;
    int a,b,c;
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d%d",&a,&b,&c);
        p[i].data = a;
        p[i].l = b;
        p[i].r = c;

    }
    rec(1);
    cout<<d[ans];
}
时间: 2024-10-13 18:05:04

查找二叉树(tree_a)的相关文章

数据结构与算法(c++)——查找二叉树与中序遍历

查找树ADT--查找二叉树 定义:对于树中的每个节点X,它的左子树中的所有项的值小于X中的项,而它的右子树中所有项的值大于X中的项. 现在给出字段和方法定义(BinarySearchTree.h) #include <queue> class BinarySearchTree { private: struct Node { int value; Node* left; Node* right; }; Node* root; void insert(Node*, int); void trav

查找二叉树

[问题描述] 已知一棵二叉树用邻接表结构存储,中序查找二叉树中值为x的结点,并指出是第几个结点.例:如图二叉树的数据文件的数据格式如下 7 15 5 2 3 12 4 5 10 0 0 29 0 0 15 6 7 8 0 0 23 0 0 •‘ 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 struct node 6 { 7 int parent;

平衡查找二叉树

AVL树是平衡二叉查找树.在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树.查找.插入和删除在平均和最坏情况下都是O(log n).增加和删除可能需要通过一次或多次树旋转来重新平衡这个树.它能保持二叉树的高度平衡,尽量降低二叉树的高度,减少树的平均搜索长度. AVL树的性质 左子树和右子树的高度之差的绝对值不超过1 树中的每个左子树和右子树都是AVL树 节点的平衡因子是它的左子树的高度减去它的右子树的高度.带有平衡因子 1.0 或 -1 的节点被认为是平衡的.带有平衡因

二叉树各种相关操作(建立二叉树、前序、中序、后序、求二叉树的深度、查找二叉树节点,层次遍历二叉树等)(C语言版)

将二叉树相关的操作集中在一个实例里,有助于理解有关二叉树的相关操作: 1.定义树的结构体: 1 typedef struct TreeNode{ 2 int data; 3 struct TreeNode *left; 4 struct TreeNode *right; 5 }TreeNode; 2.创建根节点: 1 TreeNode *creatRoot(){ 2 TreeNode * root =(TreeNode *)malloc(sizeof(TreeNode)); 3 if(NULL=

BinarySearchTree查找二叉树独立实现

先看看实现了哪些功能吧? (1)构造二叉树 (2)遍历二叉树结点 (3)搜索二叉树结点 (4)删除二叉树结点 (5)判断结点是否存在二叉树 看看源码: package hk.inso.service; /** * Created by IntelliJ IDEA. * Date: 8/17/15 11:45 PM * Author: Richard */ public class BinarySearchTree { /** * 根结点,是所有遍历的入口 */ private Node root

查找二叉树中符合特定条件的值

总结了一下基本用到的公式. 下面用数组存了下,循环求解了 /* 满二叉树:一棵深度为h,且有2的(h)次方-1个节点的二叉树 特点:每一层上的结点数都是最大结点数 它的叶子数是: 2^(h-1) 第k层的结点数是: 2^(h-1) 总结点数是: 2^h-1 (2的k次方减一) 总节点数一定是奇数.所以 2^h-1=127,得出h=7.叶子数为:2^(h-1)=2^(7-1)=64 ----------------------------------------------------------

查找二叉树(插入、删除、查找)实现

二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值: 它的左.右子树也分别为二叉排序树. 如图: 基于这样的特性,查找的时候就很好操作了,从根节点开始,查找,如果值大于节点值,往右找:如果值小于节点值,往左找:如果值刚好相等,就找到了.是不是看着就能写出代码了?这种查找过程很像二分查找法,但是那

数据结构 --- 03.查找, 二叉树

一.查找 1.顺序查找(列表无序) 顺序查找原理剖析: 从列表中的第一个元素开始,我们按照基本的顺序排序,简单地从一个元素移动到另一个元素, 直到找到我们正在寻找的元素或遍历完整个列表.如果我们遍历完整个列表,则说明正在搜索的元素不存在. def search(alist,item): find = False length = len(alist) for i in range(length): if alist[i] == item: find = True return find alis

【JAVA】【leetcode】【查找二叉树最小深度】

题目:  minimum-depth-of-binary-tree 要求:Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node. 思路: 两种方法: 第一,使用递归,相当于遍历了整个二叉树,递归返回深度浅的那棵子树的深度. 第二,按层检查