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

题目:

Description

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

Prototype

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

Input Param

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

Output Param

pulWidth   宽度

pulHeight  高度

Return Value

0          成功

1          失败或其它异常

分析:使用二叉树的层序遍历,使用队列非常easy的解决这个问题

代码例如以下:

int GetBiNodeInfo(BiNode &head, unsigned int *pulWidth, unsigned int *pulHeight)
{
	/*在这里实现功能*/
	if(&head==NULL)
		return -1;
	*pulWidth=0;
	*pulHeight=0;
	queue<BiNode*> biStack;
	biStack.push(&head);
	while(!biStack.empty()){
		++(*pulHeight);
		if(biStack.size()>*pulWidth)
			*pulWidth=biStack.size();
		int i=biStack.size();
		while(i>0){
			BiNode * temp=biStack.front();
			biStack.pop();
			if(temp->left!=NULL)
				biStack.push(temp->left);
			if(temp->right!=NULL)
				biStack.push(temp->right);
			i--;
		}
	}
	printf("pulWidth=%d\n pulHeight=%d\n",*pulWidth,*pulHeight);
	return 0;
}
时间: 2024-08-29 08:22:01

给定一个二叉树,获取该二叉树的宽度深度的相关文章

(016)给定一个有序数组(递增),写程序构建一棵具有最小高度的二叉树(keep it up)

给定一个有序数组(递增),写程序构建一棵具有最小高度的二叉树. 由于数组是递增有序的,每次都在中间创建结点,类似二分查找的方法来间最小树. struct TreeNode { int data; TreeNode* leftChild; TreeNode* rightChild; }; void newNode(TreeNode*& vNode, int vData) { vNode = new TreeNode; vNode->data = vData; vNode->leftChi

(016)给定一个有序数组(递增),敲代码构建一棵具有最小高度的二叉树(keep it up)

给定一个有序数组(递增),敲代码构建一棵具有最小高度的二叉树. 因为数组是递增有序的.每次都在中间创建结点,类似二分查找的方法来间最小树. struct TreeNode { int data; TreeNode* leftChild; TreeNode* rightChild; }; void newNode(TreeNode*& vNode, int vData) { vNode = new TreeNode; vNode->data = vData; vNode->leftChi

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回

题目:给定一个二叉树其中的一个结点(此节点可以为二叉树任意一个节点),请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 此二叉树的中序遍历为:8.4.9.2.10.5.1.6.3.7 思路: (1)如果此结点有右结点:返回 此结点的右结点 的最左的结点(例如4.2) (2)如果此结点没有右结点:(1)此结点为根节点:返回None  (2)此结点为上一个结点的左节点:返回上一个结点(例如结点6.8)  (3)此结点为上一个结点的右节点:(1)此

给定一个二叉树的dfs遍历结果(NULL记为*),重构二叉树,返回头节点

给定一个二叉树的dfs遍历结果(NULL记为*),重构二叉树,返回头节点. 思路:第一遍先把*也插入到树中,第二遍把*改成NULL. 如果直接把*记录为NULL,那再来一个节点就不知道,到底是*赋值的NULL,还是本身自带的NULL. 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 struct TreeNode{ 5 char val; 6 TreeNode* left; 7 TreeNode* right; 8 TreeNode(

给定一个用户,获取其密码警告期限;而后判断用户密码使用期限是否已经小于警告期限

if 给定一个用户,获取其密码警告期限:而后判断用户密码使用期限是否已经小于警告期限:    提示:计算方法,最长使用期限减去已经使用的天数即为剩余使用期限:    如果小于,则显示"Warning":否则,就显示"OK".   #!/bin/bash W=`grep"student" /etc/shadow | cut -d: -f6` S=`date+%s` T=`expr$S/86400` L=`grep"^student&quo

给定一个用户,获取其密码警告期限; 而后判断用户密码使用期限是否已经小于警告期限;

需求: 给定一个用户,获取其密码警告期限: 而后判断用户密码使用期限是否已经小于警告期限: #!/bin/bash USERNAME=user1 Warndays=`grep "\$USERNAME" /etc/shadow  | cut -d : -f 6` Nowsecs=`date +%s` let Nowdays=$Nowsecs/86400 echo "nowday is $Nowdays" Moddays=`grep "\$USERNAME&q

二叉树之线索二叉树

相对于顺序存储结构而言,利用链式存储结构的二叉树已经有了很高的存储效率,单是还是有空间上未利用到的地方,比如说叶子结点的左右孩子是空的,指向左右孩子的指针就是空闲的,没有被利用到:而且,有时候给定一个结点,我们需要查找该结点的前驱结点和后继结点,如果按照中序遍历的做法去查找的话,对于一个非叶子结点,其前驱和后继结点查找可以以下算法: 1.preNode=node.left;//前去结点就是该结点的左孩子 2.subNode=search(node.right)://后继结点是该结点的右子树的最左

数据结构与算法(八)-二叉树(斜二叉树、满二叉树、完全二叉树、线索二叉树)

前言:前面了解了树的概念和基本的存储结构类型及树的分类,而在树中应用最广泛的种类是二叉树 一.简介 在树型结构中,如果每个父节点只有两个子节点,那么这样的树被称为二叉树(Binary tree).其中,一个父结点的两个字节点分别叫做“左子节点”和“右子节点”.不过也不是所有父节点都有两个子节点,只有左子节点或者只有右子节点的情况也存在.另外,也会存在叶子结点,也就是一个子节点都没有的节点,唯一的限制就是每一个节点的子节点不能超过两个. 之前谈过的单向链表,是一种通过“指向下一个元素的指针”来连接

如何通过js和jquery获取图片真实的宽度和高度

在做pc网页的时候,有时候会考虑按照插入的图片的尺寸来判断图片是横图还是竖图.然后判断过后给予不同的展示方式! 另外一种就是在手机页面上,在新闻页插入的图片往往都是按照图片的原尺寸来展示,如果手机屏幕太小,太大的图就会超出去!这时候有两种解决办法 1.给所有的图片加上这样的样式 .news img{margin:5px auto; display:block;width:100%; height:auto;} 但是这种方式有另外一个问题就是,如果插入的图片本身就很小的话,也会被直接拉伸成100%