lintcode 632. 二叉树的最大节点
2018-01-11 21:52
176 查看
描述:
在二叉树中寻找值最大的节点并返回。
您在真实的面试中是否遇到过这个题?
样例
给出如下一棵二叉树:
返回值为
思路:肯定递归啦QAQ,但是注意不要踩访问空指针的坑,比如一开始我就踩了几个
先上代码(先干为敬)
觉得太丑了,遂优之
这就好看多了
我踩的坑在于:最小子结构是一颗小树,这个树要返回三个节点中包含数值最大的那个。按照这个思路递归,如果这个树的左子树,或右子树为空,就不递归查找左右子树。同时,由于后面的比较要访问左右子树,所以一开始左右子树赋初值就是根节点,一波操作,完美避坑(想试坑的话可以让 left = right = nullptr)
VS下测试用代码:
在二叉树中寻找值最大的节点并返回。
您在真实的面试中是否遇到过这个题?
样例
给出如下一棵二叉树:
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; }
相关文章推荐
- 【入门】lintcode 632: 二叉树的最大节点
- LintCode入门练习——632. 二叉树的最大节点
- LintCode入门练习——632. 二叉树的最大节点
- Lintcode 入门-632. 二叉树的最大节点
- 【LintCode-632】二叉树的最大节点(Java实现)
- 【LintCode 入门】632. 二叉树的最大节点
- LintCode-(632)二叉树的最大节点
- 一、lintcode刷题记录--矩阵面积、二叉树的最大节点、整数排序、删除链表中的元素
- LintCode-二叉树的最大节点
- LintCode:二叉树的最大节点632
- LintCode 第632题 二叉树的最大节点
- LintCode_632_二叉树的最大结点
- [Lintcode]二叉树的最大节点
- 二叉树的最大节点-LintCode
- LintCode之632 二叉树最大节点
- LintCode_632_二叉树的最大结点
- LintCode 二叉树的最大节点
- (lintcode)第632题二叉树的最大节点
- 二叉树最大节点-lintCode
- LintCode 二叉树的最大节点