码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-03-15 13:57:02      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

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

这是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;  
}  


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

标签:

原文地址:http://blog.csdn.net/u014082714/article/details/44276001

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!