LeetCode·每日一题·998,最大二叉树 || ·递归
2023-09-27 14:26:29 时间
链接:https://leetcode.cn/problems/maximum-binary-tree-ii/solution/-by-xun-ge-v-r5uq/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目![](https://img-blog.csdnimg.cn/9d227dc3045946b4bd23f995a736ad39.png)
示例![](https://img-blog.csdnimg.cn/3148161c1a8f4a9b9b64605393a89559.png)
思路
解题思路
关于树的相关问题使用递归基本上都可以解决
本题并不难,感觉难点在于读懂题目。
题目给定的根节点是由一个数组a根据最大树规则构造的一个最大树,在数组a后面加一个元素返回重新构造之后的最大树
【暴力解法】
那就简单了,暴力解法就是先使用中序遍历将根节点转化为数组a,再在数组a后面添加一个元素转化为数组b,然后再将数组b转化为最大树,转化规则题目都给定了,直接使用递归按题目给定要求构造即可
【利用最大树性质】
很显然暴力解法时间消耗大,而且繁琐。那么有没有简单一些的方法呢,当然有。
我们可以利用最大树规则性质,可以发现在数组a后面添加一个元素数组b
- 如果这个元素val比数组a最大值(其实就是根节点)大,那么val左边的元素(其实就是当前根节点的子孙节点)都是val的左节点
- 如果这个元素val比数组a最大值(其实就是根节点)小,那么val肯定是当前根节点的右节点
- 利用上面性质递归即可,需要细细品味
代码注释超级详细
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* insertIntoMaxTree(struct TreeNode* root, int val){
//如果这个元素val比数组a最大值(其实就是根节点)大
//那么val左边的元素(其实就是当前根节点的子孙节点)都是val的左节点
//当前节点不存在,那肯定就比val小
if(!root || root->val < val)
{
struct TreeNode* node = (struct TreeNode* )calloc(1, sizeof(struct TreeNode));
node->val = val;
node->left = root;
return node;
}
//如果这个元素val比数组a最大值(其实就是根节点)小
//那么val肯定是当前根节点的右节点
root->right = insertIntoMaxTree(root->right, val);
return root;
}
作者:xun-ge-v
链接:https://leetcode.cn/problems/maximum-binary-tree-ii/solution/-by-xun-ge-v-r5uq/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章
- Leetcode: Delete Node in a Linked List
- Leetcode: Palindrome Linked List
- 【LeetCode】二叉树的递归问题
- [LeetCode]剑指 Offer 55 - I. 二叉树的深度
- [LeetCode]104. 二叉树的最大深度
- LeetCode 165. 比较版本号
- LeetCode 199. 二叉树的右视图
- LeetCode | 删除有序数组中的重复项【双指针实现】
- 159、【动态规划】leetcode ——322. 零钱兑换:二维数组+一维滚动数组(C++版本)
- 105、【树与二叉树】leetcode ——530. 二叉搜索树的最小绝对差:中序遍历递归法+迭代法(C++版本)
- 96、【树与二叉树】leetcode ——404. 左叶子之和:递归法[先序+后序]+迭代法[先序+层次](C++版本)
- 89、【树与二叉树】leetcode ——101. 对称二叉树:后序递归+迭代法+层次遍历(C++版本)
- 【leetcode】力扣 --- 日积月累,每日一题——4 整数反转
- 【Leetcode】105: 从前序与中序遍历序列构造二叉树
- 【Leetcode】222.完全二叉树的节点个数
- [LeetCode] 951. Flip Equivalent Binary Trees 翻转等价二叉树
- [LeetCode] 894. All Possible Full Binary Trees 所有可能的满二叉树
- [LeetCode] Encode N-ary Tree to Binary Tree 将N叉树编码为二叉树
- [LeetCode] 817. Linked List Components 链表组件
- [LeetCode] 545. Boundary of Binary Tree 二叉树的边界
- [LeetCode] 314. Binary Tree Vertical Order Traversal 二叉树的竖直遍历
- [LeetCode] 106. Construct Binary Tree from Inorder and Postorder Traversal 由中序和后序遍历建立二叉树
- [LeetCode] 107. Binary Tree Level Order Traversal II 二叉树层序遍历之二
- leetcode 94. Binary Tree Inorder Traversal 二叉树的中序遍历(中等)
- leetcode 144. Binary Tree Preorder Traversal 二叉树展开为链表(中等)
- leetcode算法145.二叉树的后序遍历
- leetcode算法94.二叉树的中序遍历