题目:编写一个函数:实现在二叉树中查找与字符key内容相同的结点,并返回其在二叉树中的层数。如果二叉树中不存在该结点,则返回-1.

#include "stdio.h"

typedef struct BiTNode{
    char data;   /*结点的数据域*/
    struct BiTNode *lchild , *rchild;  /*指向左孩子和右孩子*/
} BiTNode , *BiTree;

/*创建一棵二叉树*/
void CreatBiTree(BiTree *T){
    char c;
    scanf("%c",&c);
    if(c == ' ') *T = NULL;
    else{
       *T = (BiTNode * )malloc(sizeof(BiTNode));  /*创建根结点*/
        (*T)->data = c;    /*向根结点中输入数据*/
        CreatBiTree(&((*T)->lchild));  /*递归地创建左子树*/
        CreatBiTree(&((*T)->rchild));  /*递归地创建右子树*/
    }
}

int getNodelayer (BiTree T,int level,char key) {
    int l;
    if(T) {   
        if(T->data == key) {
            return level;    /*找到与key值相同的结点,将层数level返回*/
        }  
        l = getNodelayer (T->lchild,level+1,key);  /*在左子树中查找key结点,并得到其层数*/
        if(l != -1) {
            return l;
        } else {
            /*在右子树中查找key结点,并得到其层数*/
            return getNodelayer (T->rchild,level+1,key) ;       
        }        
    }
    return -1;    /*T为NULL,返回-1*/
}

int getBiTreeNodeLayer(BiTree T, char key) {
    int level = 1;
    return getNodelayer(T,level,key);
}
main()
{
   BiTree T = NULL;  /*最开始T指向空*/
   char key;
   int level;
   printf("Input some characters to create a binary tree \n");
   CreatBiTree(&T);  /*创建二叉树*/
   getchar();
   printf("Input the node element in this bitree \n");
   scanf("%c", &key);
   level = getBiTreeNodeLayer(T,key);
   if (level != -1) {
       printf("The element %c is in the level %d in this bitree\n", key,level);
   } else {
        printf("There is no element %c is in this bitree\n",key);
   }
   getchar();
   getchar();
}

编程计算二叉树中某结点的层数相关推荐

  1. 数据结构用递归算法计算二叉树中叶子结点数目的思想c语言程序,编写递归算法计算二叉树中叶子结点的数目。.doc...

    编写递归算法计算二叉树中叶子结点的数目. 学院名称专业班级实验成绩学生姓名学号实验日期课程名称数据结构实验题目2 树一.实验目的与要求 Cfree 三.实验内容和原理 [问题描述] [输入] &quo ...

  2. 编写递归算法,计算二叉树中叶子结点的数目

    编写递归算法,计算二叉树中叶子结点的数目 1 #include<iostream> using namespace std;typedef struct TNode//二叉树结构 {cha ...

  3. C/C++递归算法,计算二叉树中叶子结点的数目

    关键思路:叶子结点的度为0,即没有左孩子和右孩子 关键代码: int searchNum(BiTree T) {if (!T) return 0;else{int l, r;l=searchNum(T ...

  4. 二叉树的进阶操作---(求二叉树中所有结点个数,求叶子结点个数,求第k层结点个数;在二叉树中查找某一结点;层序遍历;判断是否为完全二叉树)

    typedef struct TreeNode {struct TreeNode *left;struct TreeNode *right;char val; }TreeNode;typedef st ...

  5. 二叉树中的结点查找、插入

    前面实现了通用树结构,介绍了树到二叉树的转换,这节实现二叉树中的结点查找.插入 目录 1. 二叉树的存储结构设计 2.二叉树中的结点查找操作 3.二叉树中的结点插入操作 1. 二叉树的存储结构设计   ...

  6. 二叉树题目----4 前序遍历重构二叉树 AND 求二叉树中所有结点的个数

    前序遍历重构二叉树 思路 整个二叉树用数组存储 因为先序遍历它先遍历根,再遍历左,左边没有跑完是不会去遍历右边的,所以遍历左子树,就是数组元素每回向后一个,个数-1 遍历右边时,就是数组起始位置+左子 ...

  7. 交换二叉树中所有结点的左右子树的位置

    #include<stdlib.h> #include<stdio.h> #include<stack> #define N 50 using namespace ...

  8. Java创建二叉树,并使用递归算法求二叉树中叶子结点的数目

    问题描述 创建二叉树,并使用递归算法求二叉树中叶子结点的数目 输入 输入一个用'.'来标明空子树的先根遍历序列,如ABD-EH-CF.I-G- 输出 叶子结点的个数 存储结构 二叉树 算法的基本思想 ...

  9. java 获取叶子节点个数_数据结构编程: 统计二叉树中叶子结点的个数。

    展开全部 叶子节点:没有孩子节点的节点 也就是说,当我们明白了叶子节点的定义62616964757a686964616fe59b9ee7ad9431333363376531后,只需要遍历一遍二叉树,把 ...

  10. (数据结构)1.实现二叉树的各种基本运算的算法2.实现二叉树的各种遍历算法3. 由遍历序列构造二叉树4.求二叉树中的结点个数、叶子节点个数、某结点层次和二叉树宽度

    实验内容 1.假设二叉树中的每个结点值为单个字符,采用二叉链存储结构存储.设计一个算法,计算一棵给定二叉树b中的所有单分支结点个数. 2.假设二叉树中的每个结点值为单个字符,采用二叉链存储结构存储.设 ...

最新文章

  1. 计算机二本生不学编程还能干什么6,不建议二本考生报考的6个专业,除非真的感兴趣!...
  2. 错误:无法访问android.app.Activity 找不到android.app.Activity的类文件
  3. 方差为平方的均值减去均值的平方
  4. [Spring Framework]学习笔记--Dependency injection(DI)
  5. 二维非稳态导热微分方程_室内湿度影响验证:非真空型稳态法导热仪的正确使用方式...
  6. Fiori elements:when smart template is entered for first time, no data filled
  7. 一些Cloud for Customer的客户需求
  8. 机械臂中的四元素转为旋转矩阵_雅克比矩阵(上)雅克比推导
  9. 深度学习《再探AE和VAE的区别》
  10. 反向算法_10分钟带你了解神经网络基础:反向传播算法详解
  11. centos 文件夹网络连接_CentOS的网络配置的命令详解
  12. Apache 配置多端口网站
  13. 电感式升压转换器-AIC1896 电感式升压转换器
  14. ASP.NET全套视频教程
  15. CMSC5713-IT项目管理之四、项目规划Project Planning
  16. 如何将Tricaster非线性编辑的视频内容发布至网络进行网页直播
  17. 【源码】update-notifier 检测 npm 包是否更新~
  18. matlab的simulink中的normal模式acclerator等模式的选择方法
  19. 微信公众号-授权登录
  20. AOP技术介绍--(.Net中关于AOP的实现)

热门文章

  1. WPF-使用代码创建Grid行与列,并将控件添加到Grid中的指定行指定列
  2. IE7、IE8、IE9、IE10后各版本的更新及差别
  3. 【Zookeeper系列】Zookeeper命令操作(转)
  4. 调用Thread类的方法:public final String getName() 为什么得到的线程对象的名称默认是:Thread-0、Thread-1、Thread-2、...呢?...
  5. Tomcat下work文件夹的作用
  6. 百度下半年惩罚网站的低质量,坏消息到来硕士
  7. java reactive web,基于RxJava的函数式Reactive Web框架:datamill
  8. python的整数类型_python基本数据类型
  9. python中pandas作用_Python Pandas滚动功能
  10. phonegap文件上传(java_php),Android应用开发之使用PhoneGap实现位置上报功能