华为练习 求二叉树的宽度和深度

求二叉树的宽度和深度

给定一个二叉树,获取该二叉树的宽度和深度。

例如输入

a

/ \

b c

/ \ / \

d e f g

返回3.

详细描述:

接口说明

原型:

int GetBiNodeInfo(BiNode &head, unsigned int *pulWidth, unsigned int *pulHeight)

输入参数:

head 需要获取深度的二叉树头结点

输出参数(指针指向的内存区域保证有效):

pulWidth 宽度

pulHeight 高度

返回值:

0 成功

1 失败或其他异常

int DEEP;//深度,初始节点深度为0.则计算完了,将deep加一
int level[10010];//假定最高10010层。太大了就无法保存了。

//深度优先遍历
void DFS(int d,BiNode *n){//d为所要遍历的节点的层数
	if(n != 0){
		if(d > DEEP)
			DEEP = d;
		level[d] ++;
		DFS(d+1,n->left);
		DFS(d+1,n->right);
	}
}
/*
Description
         给定一个二叉树,获取该二叉树的宽度深度。
Prototype
         int GetBiNodeInfo(BiNode &head, unsigned int *pulWidth, unsigned int *pulHeight)
Input Param
         head   需要获取深度的二叉树头结点
Output Param
         pulWidth   宽度
         pulHeight  高度
Return Value
         0          成功
         1          失败或其他异常
*/
int GetBiNodeInfo(BiNode &head, unsigned int *pulWidth, unsigned int *pulHeight)
{
	/*在这里实现功能*/

	for(int i = 0; i < 10010;i++)
		level[i] = 0;
	DEEP = 0;
	DFS(0,&head);
	DEEP++;
	*pulHeight = DEEP;
	DEEP = 0;
	for(int i =0; i < 10010;i++)
		DEEP = level[i] > DEEP ? level[i] : DEEP;
	*pulWidth = DEEP;
	return 0;
}

华为练习 求二叉树的宽度和深度,布布扣,bubuko.com

时间: 2024-08-28 06:46:51

华为练习 求二叉树的宽度和深度的相关文章

[华为机试练习题]42.求二叉树的深度和宽度

题目 题目标题: 求二叉树的宽度和深度 给定一个二叉树,获取该二叉树的宽度和深度. 例如输入 a / b c / \ / d e f g 返回3. 接口说明 原型: int GetBiNodeInfo(BiNode &head, unsigned int *pulWidth, unsigned int *pulHeight) 输入参数: head 需要获取深度的二叉树头结点 输出参数(指针指向的内存区域保证有效): pulWidth 宽度 pulHeight 高度 返回值: 0 成功 1 失败或

华为机试—二叉树知识点

建立一个二叉树,求其高度,首先前.中.后序遍历,求叶子数,求树深度并且判断是否为平衡二叉树. 二叉树是一个典型的数据结构,华为往年的试题中也有考到这个知识点的. 下面介绍几个树的重要性质: 性质1 二叉树第i层上的结点数目最多为2^(i-1)(i≥1). 性质2 深度为k的二叉树至多有2^k-1个结点(k≥1). 性质3 在任意-棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1. #include <stdio.h> #include <stdlib.h>

求二叉树深度

概念: 1.二叉树深度:树中结点的最大层次称为树的深度或高度. 2.二叉树层次:从根开始定义起,根为第一层,根的孩子为第二层,以此类推. 要点: 1.递归. 2.二叉树深度为左右子树深度较大值+1. 代码: /* 求二叉树深度 by Rowandjj 2014/7/13 ------------------------------- 题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 输入: 第一行输入有n,n表示

二叉树各种相关操作(建立二叉树、前序、中序、后序、求二叉树的深度、查找二叉树节点,层次遍历二叉树等)(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=

二叉树(4)----求二叉树深度

1.二叉树定义 typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTreeNode_t_ *m_pRight; } BTreeNode_t; 2.求二叉树深度 定义:对任意一个子树的根节点来说,它的深度=左右子树

求二叉树的最小深度

思路:用递归的方法求解. 输入:二叉树的根节点: 输出:二叉树的最小深度. 最小深度的定义:从根节点到叶子节点的最短路径上的节点数. 算法如下: 将二叉树分为这么几种情况: 传入的根节点为空,返回NULL: 传入根节点不为空,左子树为空,右子树为空,返回最小深度1: 传入根节点不为空,左子树为空,右子树不为空,返回右子树的最小深度+1: 传入根节点不为空,左子树不为空,右子树为空,返回左子树的最小深度+1: 传入根节点不为空,左右子树都不为空,则返回左右子树中最小深度的较小值+1. 代码如下:

求二叉树中任意两个结点的距离

求二叉树中任意两个结点的距离 实现步骤: 计算跟到第一个结点的距离: 计算跟到第二个结点的距离: 计算lca: 计算跟到lca结点的距离: 结果为(1) + (2) - 2 * (4),因为重复计算了两次的从跟到lca结点的距离: 1 class Node(object): def __init__(self, value=0): self.value = value self.left = self.right = None def get_path_length(root, n, path)

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

已知二叉树的前序遍历、中序遍历或者中序遍历、后序遍历求二叉树结构的算法

二叉树中的前序遍历是先访问根结点,再访问左子树,右子树. 中序遍历是先访问左子树,再是根结点,最后是右子树. 后序遍历是先访问左子树,再是右子树,最后是根结点. 算法思路是先根据前序遍历的第一个结点或者后序遍历的最后一个结点,查找对应在中序遍历中的位置,就可以确定左子树包含的元素和右子树包含的元素,最后通过递归来实现就可以了. 二叉树的表示形式为 //二叉树的结构表示为 class TreeNode { int val; TreeNode left; TreeNode right; TreeNo