您的位置:首页 > 其它

lintcode 632. 二叉树的最大节点

2018-01-11 21:52 176 查看
描述:

在二叉树中寻找值最大的节点并返回。

您在真实的面试中是否遇到过这个题?

样例

给出如下一棵二叉树:
1
/   \
-5     2
/ \   /  \
0   3 -4  -5


返回值为
3
的节点。

思路:肯定递归啦QAQ,但是注意不要踩访问空指针的坑,比如一开始我就踩了几个

先上代码(先干为敬)

/* version 1.0*/
class Solution {
public:
/*
* @param root: the root of tree
* @return: the max node
*/
TreeNode * maxNode(TreeNode * root) {
// write your code here
if (nullptr == root)
{
return nullptr;
}
else
{
TreeNode *left, *right;
left = maxNode(root->left);
left = nullptr == left ? root : left;

right = maxNode(root->right);
right = nullptr == right ? root : right;

int i_left = nullptr == left ? INT_MIN : left->val;
int i_right = nullptr == right ? INT_MIN : right->val;

TreeNode *childMax = i_left > i_right ? left : right;

return root->val > childMax->val ? root : childMax;
}
}
};

觉得太丑了,遂优之

/* version 2.0*/
class Solution {
public:
/*
* @param root: the root of tree
* @return: the max node
*/
TreeNode * maxNode(TreeNode * root) {
// write your code here
if (nullptr == root)
{
return nullptr;
}
else
{
TreeNode *left, *right;
left = right = root;

if (nullptr != root->left)
left = maxNode(root->left);

if (nullptr != root->right)
right = maxNode(root->right);

TreeNode *childMax = left->val > right->val ? left : right;
return root->val > childMax->val ? root : childMax;
}
}
};

这就好看多了

我踩的坑在于:最小子结构是一颗小树,这个树要返回三个节点中包含数值最大的那个。按照这个思路递归,如果这个树的左子树,或右子树为空,就不递归查找左右子树。同时,由于后面的比较要访问左右子树,所以一开始左右子树赋初值就是根节点,一波操作,完美避坑(想试坑的话可以让 left = right = nullptr)

VS下测试用代码:
/*节点*/
struct TreeNode
{
TreeNode *left;
TreeNode *right;
int val;

TreeNode(int _val = 0):left(nullptr), right(nullptr), val(_val){}
};

int main(void)
{
TreeNode *node_1 = new TreeNode(1);
TreeNode *node__5 = new TreeNode(-5);
TreeNode *node_2 = new TreeNode(2);
TreeNode *node_0 = new TreeNode(0);
TreeNode *node_3 = new TreeNode(3);
TreeNode *node__4 = new TreeNode(-4);
TreeNode *node__6 = new TreeNode(-6);

node_1->left = node__5;
node_1->right = node_2;

node__5->left = node_0;
node__5->right = node_3;

node_2->left = node__4;
node_2->right = node__6;

Solution solution;

std::cout << "The result = " << solution.maxNode(node_1)->val << std::endl;

system("PAUSE");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: