2015阿里秋招其中一个算法题(经典)

写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率

这是2015阿里秋招的一个在线笔试题

实现方法很简单,遍历一遍二叉树,找出最大最小,一相减就可以求出最大的差值

之前在做题的时候居然写递归的方法求值,后面测试了一下,果然结果不对

只要是非递归的的方法遍历都可以很容易找出最大值最小值,效率也比较高,时间复杂度为O(n)。

下面是我用非递归从上往下遍历二叉树的方法

用队列容器即可方便实现。

我写的代码:

#include <iostream>

#include <tchar.h>

#include <queue>

using namespace std;

typedef struct BinaryTreeNode

{

int  m_nValue;

BinaryTreeNode *m_pLeft;

BinaryTreeNode *m_pRight;

}BinaryTreeNode ;

int MaxT(BinaryTreeNode *pRoot)

{

int max=pRoot->m_nValue,min=pRoot->m_nValue;

if(!pRoot)

{

return 0;

}

queue<BinaryTreeNode*>qTree;

qTree.push(pRoot);

while(!qTree.empty())

{

BinaryTreeNode *pNode=qTree.front();

if(max<pNode->m_nValue)

{

max=pNode->m_nValue;

}

else

if(min>pNode->m_nValue)

{

min=pNode->m_nValue;

}

qTree.pop();

if(pNode->m_pLeft)

qTree.push(pNode->m_pLeft);

if(pNode->m_pRight)

qTree.push(pNode->m_pRight);

}

return max-min;

}

//以先序的方式构建二叉树,输入-1表示结点为空

void CreateBinaryTree(BinaryTreeNode *&pRoot)

{

int nNodeValue = 0;

cin >> nNodeValue;

if (-1== nNodeValue)

{

pRoot = NULL;

return;

}

else

{

pRoot = new BinaryTreeNode();

pRoot->m_nValue = nNodeValue;

CreateBinaryTree(pRoot->m_pLeft);

CreateBinaryTree(pRoot->m_pRight);

}

}

void PrintInOrder(BinaryTreeNode *&pRoot)

{

if (pRoot != NULL)

{

PrintInOrder(pRoot->m_pLeft);

cout << pRoot->m_nValue << " ";

PrintInOrder(pRoot->m_pRight);

}

}

int _tmain(int argc, _TCHAR* argv[])

{

BinaryTreeNode *pRoot = NULL;

CreateBinaryTree(pRoot);

cout <<"中序遍历为:"<<endl;

PrintInOrder(pRoot);

cout << endl;

int maxabs=MaxT(pRoot);

cout<<"最大绝对值为"<<maxabs<<endl;

//vector<int> path;

//FindPath(pRoot, 22, path);

system("pause");

return 0;

}

时间: 2024-10-10 03:18:09

2015阿里秋招其中一个算法题(经典)的相关文章

搜狗2019秋招的一道算法题:龟兔赛跑

时间限制:3秒 空间限制:92160K 定义如下图所示的比赛地图: S表示比赛起点,E表示比赛终点.实线表示陆路,虚线表示水路.兔子只能走陆路,乌龟既可以走陆路也可以走水路.每条路径的长度在图中给出.假定兔子和乌龟足够聪明,问谁先到达终点. 输入描述: 第1行输入v1,v2.v1是兔子的速度,v2是乌龟的速度(水路.陆路速度相同).第2行输入n,m,点的编号是1~n,然后是m行,其中1是起点,n是终点(路径本身不限定方向).下面m行4个数 a, b, d, c,表示a和b之间有一条边,且其长度为

[转载]从春招到秋招,一个本科生的求职之路。

原文:从春招到秋招,一个本科生的求职之路. 自报家门,北理工软件学院本科生. 主要部分: 1.毕业去向选择 2.春招过程 3.暑期实习 4.秋招辛酸路程 5.一点感悟 1.毕业去向选择问题 从大一开始,就决定毕业找工作,方向是有了,但是三年多过去了,到现在才发现,大学期间并没有为这个方向做出太大的努力,这也成为我一个本科生找工作的很大障碍,实践能力严重不足.我的情况是:我决定工作,但是由于高中的思维,太看重学习成绩,成绩搞的很好,虽然有保研资格,但是又不读研,找工作的时候,好的互联网公司不看成绩

(关于一个算法题的两点新思路)给你一组字符串 如 {5,2,3,2,4,5,1,2,1,5},让你输出里面出现次数最多且数值最大的一个,出现几次

在网上看到一个算法题,不是很难,搜一下也有解决办法,但是一般都是几层for循环,试着写了下 /** * 给你一组字符串 如 {5,2,3,2,4,5,1,2,1,5},让你输出里面出现次数最多且数值最大的一个,出现几次 * 优点:时间复杂度为O(n) * 缺点:产生一些多余的空间,如 6,7,8没有的数也会分配一个数组空间,但是基本可以忽略 * 限制:需要预先知道最大的值是多少,或者说小于多少,这样才好确定预先分配一个数组长度是多少 */ public static void method1()

一个算法题,又是小明。囧

第一次写博客文章,有点小紧张.若是有什么错误还望众大神指点.为了备战下个月的蓝桥杯,苦战算法题,觉得有一道题不错,就拿来分享一下. 原文如下:地宫取宝,X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签.地宫的入口在左上角,出口在右下角.小明被带到地宫的入口,国王要求他只能向右或向下行走.走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿).当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可

2017年中兴武汉秋招在线编程第二题

题目描述: 给出一个只由0和1组成的二进制字符串S,写一个算法来找出:得到只由1组成的最长连续字段的不同方法数目.你可以将K个0改为1. 请注意,如果生成的字符串相同,则视两种方式为同一种方式. 输入: 该函数方法的输入包括三个参数-- size ,表示二进制字符串大小的整数 allowedChanges,表示允许的更改次数的整数(K) str 表示二进制字符串S 输出: 返回一个整数,表示得到由1组成的最长连续字段的不同方法数目. 约束条件:1<= size<=2*10^5         

阿里巴巴-2015秋招研发工程师附加题

public static void main(){     int box=500000;    string User;    try    {    for(int i=1;i<32767;i++)    {        if(user[i].getPoint>99 && user[i].getNBox()=0)        {            box--;            user[i].setNBox()=1;            user[i].s

2018秋招小红书算法方向在线编程题

代码如下: class TreeNode: def __init__(self, x): self.left=None self.right=None self.value=x def BuildTree(ceng, zhong): if len(ceng)==0: return None if len(ceng)==1: return TreeNode(ceng[0]) else: flag=TreeNode(ceng[0]) root=ceng[0] zong=zhong[:zhong.in

2015阿里巴巴秋招在线笔试题

1.淘宝网(www.taobao.com)与阿里巴巴网(www.alibaba.com)是阿里巴巴集团下的两个独立网站,假设淘宝网每天的独立访客数在亿以上(以IP计),阿里巴巴网每天的独立访客数在千万以上(以IP计):这两个网站有各自的浏览日志,记录了访客在本网站上的浏览记录,如IP.访问时间.访问页面的URL等(注:一个IP在某天可能访问多个页面):现有这两个网站某天的浏览日志文件各一份,要计算在该天既访问过淘宝网又访问过阿里巴巴网站的独立访客数大约是多少,请给出你能想到的方案(可多个). 关

2015阿里天池大数据比赛算法设计

项目地址 : https://github.com/Huangtuzhi/AlibabaRecommand AlibabaRecommand Alibaba 2015 mobile recommending algorithm competition. 比赛介绍 比赛通过对用户在移动终端上一个月的行为数据进行分析,为后一天的用户购买行为作出预测,进行推荐. 目录结构 ├── LICENSE #许可证 └── README.md #使用说明 #建表 ├── create_table.sql #创建