查找二叉树

【问题描述】

已知一棵二叉树用邻接表结构存储,中序查找二叉树中值为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;
 8     int date;
 9     int lchild;
10     int rchild;
11     int wz;
12 }a[101];
13 int n;
14 int k;//待查找的值
15 int now=0;
16 void zx(int i)
17 {
18     /*if(a[i].date==k)
19     {
20         cout<<i;
21         return;
22     }
23     else
24     {*/
25         if(a[i].lchild!=0)
26         {
27             zx(a[i].lchild);
28         }
29         //else now++;
30         if(a[i].date==k)
31         {
32             cout<<now+1;
33             return;
34         }
35         else now++;
36         if(a[i].rchild!=0)
37         {
38             zx(a[i].rchild);
39         }
40         //else now++;
41
42     //}
43 }
44 int main()
45 {
46
47
48     cin>>n>>k;
49     //for(int i=1;i<=n;i++)
50     //a[i].wz=i;
51     for(int i=1;i<=n;i++)
52     {
53         cin>>a[i].date;
54         cin>>a[i].lchild;
55         a[a[i].lchild].parent=i;
56         cin>>a[i].rchild;
57         a[a[i].rchild].parent=i;
58     }
59     zx(1);
60     return 0;
61 }
时间: 2024-10-12 22:05:04

查找二叉树的相关文章

数据结构与算法(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

查找二叉树(tree_a)

查找二叉树(tree_a) 连接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1367时间限制: 1000 ms         内存限制: 65536 KB [题目描述] 已知一棵二叉树用邻接表结构存储,中序查找二叉树中值为x的结点,并指出是第几个结点.例:如图二叉树的数据文件的数据格式如下: [输入] 第一行n为二叉树的结点个树,n<=100:第二行x表示要查找的结点的值:以下第一列数据是各结点的值,第二列数据是左儿子结点编号,第三列数据是右

平衡查找二叉树

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. 思路: 两种方法: 第一,使用递归,相当于遍历了整个二叉树,递归返回深度浅的那棵子树的深度. 第二,按层检查