微软面试题:写程序找出二叉树的深度

一个树的深度等于max(左子树深度,右子树深度)+1。可以使用递归实现。

int DepthOfTree(BiTreeNode* root)
{
 if(NULL == root)
 {
  return 0;
 }
 return max(DepthOfTree(root->leftChild), DepthOfTree(root->rightChild))+1;
}

也可以采用下面的思路:

类似于递归的先序遍历,层层向下计算,每向下计算一层,深度 
                 就加1,CalTreeDepth(PNode pn, unsigned n)中的第二个 
                 参数表示上一层的深度,所以程序在调用时, 假设proot为整个 
                 树的根节点,则其深度depth为: 
                                   unsigned depth = CalTreeDepth(proot, 0); 
*/ 
代码如下:

unsigned CalTreeDepth(PNode pn, unsigned n)
{
        static unsigned d = 0;          //使用static变量d来记录出现的最大深度
        if(pn)
        {
            if(n+1 > d)
                d = n+1;
            CalTreeDepth(pn->left, n+1);
            CalTreeDepth(pn->right, n+1);
        }
        return d;
}
时间: 2024-12-04 07:15:13

微软面试题:写程序找出二叉树的深度的相关文章

C语言实现找出二叉树中某个值的所有路径的方法_C 语言

本文实例讲述了C语言实现找出二叉树中某个值的所有路径的方法,是非常常用的一个实用算法技巧.分享给大家供大家参考. 具体实现方法如下: #include <iostream> #include <vector> #include <iterator> #include <algorithm> using namespace std; vector<int> result; struct Node { Node(int i = 0, Node *pl

数组大小为2n+1-数组相关算法java,找出需求的数据

问题描述 数组相关算法java,找出需求的数据 存在一个数组,数组大小为2n+2,里面有n对个数,例如:1,2,2,3,4,1.(数组是无序的,考虑排序的话一定会超过限制)这,6个数中的单独的数就是3,4,要你用你能想到的最高效率的方法找出来 解决方案 如果数组是连续的则可以用byte[] b = new byte[n+1];然后遍历一遍原数组,将遍历的值放入b的下标中计数,最后为1的那个下标表示数据是单独的. 这样的话总最多做3n+3次操作就能找全单独的数. 如果数组里面的数是无规律的,那么可

C语言找出数组中的特定元素的算法解析_C 语言

     问题描述:一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它.能否只用一个额外数组和少量其它空间实现.       思路:如果能用两个辅助数组,那么相对来说简单一点,可定义数组Min和数组Max,其中Min[i]表示自a[i]之后的最小值(包括a[i]),Max[i]表示自a[i]之前元素的最大值.有了这两个辅助数组后,对于a[i],如果它大于Max[i-1]并且小于Min[i+1],那么就符合要求.       但是题目要求

请问关于在一张有2~3个 QR Code 的大图上如何找出这些小的 QR Code 的座标位置

问题描述 请问一下,如何在一张大图上,其上包含有约2~3个QRCode的小图,现在想要用c#,写代码找出这2~3个QRCode的所在座标有可以参考的代码吗?谢谢! 解决方案 解决方案二:这个问题提的蛮屌的,谁给你出的难题你问问他怎么解决

c++-ACM编程题,找出敏感词串,并删除,要求时间和空间效率很高,我写的程序通不过,

问题描述 ACM编程题,找出敏感词串,并删除,要求时间和空间效率很高,我写的程序通不过, Censorfrog is now a editor to censor so-called sensitive words (敏感词). She has a long text p. Her job is relatively simple -- just to find the first occurence of sensitive word w and remove it. frog repeats

c- 给出n个数,找出这n个数的最大值,最小值,和。程序一定要用函数调用吗?这样写为什么不行?

问题描述 给出n个数,找出这n个数的最大值,最小值,和.程序一定要用函数调用吗?这样写为什么不行? #include int main() { int n,i,sum=0,max,min; int a[n]; scanf("%d",&n); printf("n"); for(i=0;i scanf("%d",a[i]); max=min=a[0]; for(i=0;i { if(a[i]>max) max=a[i]; if(a[i]

面试题:从1, 2, 3, 4, 5五个数字中能找出多少个每位数字都不同的三位数?

前言 前几天看到了一道简单的面试题,从5个数字中找出所有每位数字都不同的三位数的数量并且一一输出.从数学上来讲,算出数量比较简单,只是一个排列的计算.比如这道题的计算方法就是P(5,3) = 60.输出的过程也比较简单,这里提出两种方法: 正文 方法一: 一种通俗易懂的方法.用三个for循环,第一个for循环遍历所有的数字,第二个循环遍历除了第一个数字之外的所有数字,第三个循环遍历除了前两个数字之外的所有数字.然后输出就可以了.具体实现代码如下: public class Number { pu

串口通信-51单片机串口发送字符串给电脑 自己写了程序但出不了结果

问题描述 51单片机串口发送字符串给电脑 自己写了程序但出不了结果 #include unsigned char code L1[] = "123456789"; unsigned char code L2[] = "12345678"; void delay(void) { unsigned char n,m; for(m=0;m<200;m++) for(n=0;n<250;n++); } void send_str() { unsigned i =

c++-有哪位哥哥姐姐可以帮我写下程序(关于二叉树的 或者栈)

问题描述 有哪位哥哥姐姐可以帮我写下程序(关于二叉树的 或者栈) 那个运用c++编写两个程序,其中一个是实现二叉树(或者栈),另一个是运用二叉树(或者栈)解决实际问题.谢谢啦,实在是没搞懂. 解决方案 /** <!-- File : stack.h Author : fancy Email : fancydeepin@yeah.net Date : 2013-02-03 --!> */ #include #include #include #define Element char #defin