DS树--二叉树高度

题目描述

给出一棵二叉树,求它的高度。二叉树的创建采用前面实验的方法。

注意,二叉树的层数是从1开始

输入

第一行输入一个整数t,表示有t个二叉树

第二行起输入每个二叉树的先序遍历结果,空树用字符‘0’表示,连续输入t行

输出

每行输出一个二叉树的高度

样例输入

1 AB0C00D00

样例输出

3

提示

#include<iostream>
#include<string>
using namespace std;
class BiTreeNode
{
public:
    char data;
    BiTreeNode *Left;
    BiTreeNode *Right;
    BiTreeNode()
    {
        Left=NULL;
        Right=NULL;
    }
    ~BiTreeNode()
    {
        delete Left;
        delete Right;
    }
};

class BiTree
{
public:
    BiTreeNode *Root;
    int pos;
    string strTree;
    int deep;
    BiTree(string str)
    {
        pos=0;
        deep=0;
        strTree=str;
        Root=CreateBiTree();
    }
    BiTreeNode *CreateBiTree()
    {
        char ch=strTree[pos];
        pos++;
        if(ch==‘0‘)
        {
            return NULL;
        }
        else
        {
            BiTreeNode *T;
            T=new BiTreeNode();
            T->data=ch;
            T->Left=CreateBiTree();
            T->Right=CreateBiTree();
            return T;
        }
    }
    void countdeep(BiTreeNode *p,int i)
    {
        if(p)
        {
            i++;
            if(p->Left==NULL&&p->Right==NULL)
            {
                if(deep<i)
                    deep=i;
            }
            countdeep(p->Left,i);
            countdeep(p->Right,i);
        }
    }
};

int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        string str;
        cin>>str;
        BiTree tree(str);
        tree.countdeep(tree.Root,0);
        cout<<tree.deep<<endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/SZU-DS-wys/p/12180798.html

时间: 2024-10-09 23:37:30

DS树--二叉树高度的相关文章

DS树--二叉树之最大路径

题目描述 给定一颗二叉树的逻辑结构(先序遍历的结果,空树用字符‘0’表示,例如AB0C00D00),建立该二叉树的二叉链式存储结构 二叉树的每个结点都有一个权值,从根结点到每个叶子结点将形成一条路径,每条路径的权值等于路径上所有结点的权值和.编程求出二叉树的最大路径权值.如下图所示,共有4个叶子即有4条路径, 路径1权值=5 + 4 + 11 + 7 = 27          路径2权值=5 + 4 + 11 + 2 = 22 路径3权值=5 + 8 + 13 = 26            

树的高度

题目: 有一颗树,不一定是二叉树,有n个节点,编号为0到n-1.有一个数组A,数组的索引为0到n-1,数组的值A[i]表示节点i的父节点的id,根节点的父节点id为-1.给定数组A,求得树的高度. 分析: 这个题目我们把数组写出来,然后分析,就很明了了.如下例子: 值 3 3 3 -1 2 index 0 1 2 3 4 根据题意: 节点0,1,2的父节点为3 节点3是根节点 节点4的父节点为2 解法: 一个直接的解法是,遍历数组A中的每一个元素,回溯到根节点,得到这个节点的高度.遍历完毕数组之

4-8 求二叉树高度 (20分)

本题要求给定二叉树的高度. 函数接口定义: int GetHeight( BinTree BT ); 其中BinTree结构定义如下: typedef struct TNode *Position; typedef Position BinTree; struct TNode{ ElementType Data; BinTree Left; BinTree Right; }; 要求函数返回给定二叉树BT的高度值. 裁判测试程序样例: #include <stdio.h> #include &l

数据结构例程——以孩子兄弟链存储的树的高度

本文是数据结构基础系列(6):树和二叉树中第5课时树的存储结构的例程. 例: 以孩子-兄弟链作为存储结构,求树的高度 源程序:[说明--函数TreeCreate仅创建了如上图所示的图,不具有通用性.] #include <stdio.h> #include <malloc.h> typedef char ElemType; typedef struct tnode { ElemType data; //节点的值 struct tnode *hp; //指向兄弟 struct tno

树的高度,深度,层数和三种遍历方式

树的高度: 当只有一个根节点的时候,高度就是0. //计算树的高度int depth(Node node){ if(node == NULL) return -1; int l = depth(node->left); int r = depth(node->right); return (l < r)?(r+1):(l+1);//当只有一个根节点的时候,高度就是-1+1=0} 层数: 树的高度最底下的为第1层(有的书定义为第0层),依次向上累加 树的深度: 完全二叉树是指这样的二叉树:

数据结构学习笔记04树(二叉树、二叉搜索树、平衡二叉树)

一.树 树的基本术语 ①结点的度(Degree):结点的子树个数 ②树的度:树的所有结点中最大的度数 ③叶结点(Leaf):度为0的结点 ④父结点(Parent):有子树的结点是其子树的根结点的父结点 ⑤子结点(Child):若A结点是B结点的父结点,则称B结点是A结点的子结点:子结点也称孩子结点. ⑥兄弟结点(Sibling):具有同一父结点的各结点彼此是兄弟结点. ⑦路径和路径长度:从结点n1到nk的路径为一个结点序列n1 , n2 ,… , nk , ni是 ni+1的父结点.路径所包含边

待字闺中之树的高度分析

有一个棵树,不一定是二叉树,有n个节点,编号为0到n-1.有一个数组A,数组的索引为0到n-1,数组的值A[i]表示节点i的父节点的id,根节点的父节点id为-1.给定数组A,求得树的高度. 分析这个题目我们首先把数组写出来,然后进一步分析,就很明了了,如下例子: 333-1201234根据题意: 节点0,1,2的父节点为3 节点3是根节点 节点4的父节点为2 一个很直接的解法是,遍历数组A中的每一个元素,回溯到根节点,得到这个节点的高度.遍历完毕数组之后,取最大的,就是树的高度.上面的例子大概

递归获得二叉树高度

因为树本身就是递归定义,创建也可以递归创建,所以高度不也可以递归获得嘛?如下: int getHeight(Node* pNode) { if (pNode) { 左树高度 = getHeight(pNode->lChild) 右树高度 = getHeight(pNode->rChild) return 左右树高度较大者 + 1 } else { return 0; } } 关于树的问题很多都和递归思想有关. 递归获得二叉树高度

数据结构-非线性-树-二叉树

//概述 //线性结构用于描述数据元素之间的线性关系,实际应用的数据元素之间的关系错综复杂,很难用线性关系描述,这就用到非线性结构, //树它描述客观世界中事务之间的层次关系,一切具有层次关系的问题都可以用树来描述 //例如,家族的族谱,各种社会结构,(操作系统的文件系统中,用树表示目录结构)(编译程序中,用树表示源程序的语法结构) #pragma mark --树的定义 //树,是有n(n>=0)个结点的有限集合,当n=0时称为空树,否则在任意非空树种 //1>必须有一个特定的成为根的结点