leetcode第八周解题总结
来源:互联网 发布:笨方法学python在线 编辑:程序博客网 时间:2024/05/17 21:40
108. Convert Sorted Array to Binary Search Tree
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
题意解析:
将排序后的数组转换为一棵平衡二叉树
解题思路:
平衡二叉树的子树高度之差小于1,左节点的值小于根节点,右节点的值大于根节点。可以想到,每次取数组的中间值作为根节点即可满足这样的要求。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* sortedArrayToBST(vector<int>& nums) { int len = nums.size(); if(len == 0) return NULL; if(len == 1) return new TreeNode(nums[0]); return sortedArrayToBST(nums, 0, len - 1); } TreeNode* sortedArrayToBST(vector<int>& nums, int start, int end) { if(start > end) return NULL; int m = (start + end) /2; TreeNode* root = new TreeNode(nums[m]); root->left = sortedArrayToBST(nums, start, m - 1); root->right = sortedArrayToBST(nums, m + 1, end); return root; }};
109. Convert Sorted List to Binary Search Tree
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
题意解析:
将排序后的链表转换为一棵平衡二叉树
解题思路:
与上题的要求一致,但是数组变为链表,不能索引到中间值,如果每次寻找中间节点,则时间复杂度比较大,因此需要改变思路。这里考虑到,链表的排序等于对树进行中序遍历,因此在构建树结构时,先递归右子树,再访问根节点,最后递归左子树,这样就按照链表排序进行赋值,无需更多的操作,时间复杂度O(n)。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; *//** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* sortedListToBST(ListNode* head) { if(head == NULL) return NULL; int len = 0; lhead = head; ListNode* temp = head; while(temp != NULL){ len ++; temp = temp->next; } return sortedListToBST(0, len - 1); } TreeNode* sortedListToBST(int start, int end) { if(start > end) return NULL; int mid = (start + end)/2; TreeNode* root = new TreeNode(-1); root->left = sortedListToBST(start, mid - 1); root->val = lhead ->val; lhead = lhead ->next; root->right = sortedListToBST(mid + 1, end); return root; }private: ListNode* lhead;};
124. Binary Tree Maximum Path Sum
Given a binary tree, find the maximum path sum.
For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path must contain at least one node and does not need to go through the root.
For example:
Given the below binary tree,1 / \ 2 3
Return 6.
题意解析:
计算一棵树中的最大路径和。
解题思路:
考虑到该路径只需要包括一个节点而且不需要经过根节点的条件,不能简单的进行搜索。首先思考到,对每个子树计算最大路径,然后取最大值。因此,对于每个子树,要计算两个值:一个是通过该子树的根节点的最大路径和,另外一个是通过该子树的根节点的单边路径最大和,这个用于计算上一层的最大路径和。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: int ans = INT_MIN; int maxPathSum(TreeNode* root) { if(root == NULL) return 0; findMaxPath(root); return ans; } int findMaxPath(TreeNode* root) { if(root == NULL) return 0; int rightPath = max(findMaxPath(root->right),0); int leftPath = max(findMaxPath(root->left),0); ans = max(root->val + rightPath + leftPath, ans); return max(max(root->val + rightPath, root->val+ leftPath), root->val); }};
- leetcode第八周解题总结
- leetcode第七周解题总结
- leetcode第十周解题总结
- leetcode第十七周解题总结
- leetcode第六周解题总结(98)
- leetcode第十二周解题总结--动态规划
- leetcode第十六周解题总结--图
- leetcode第十八周解题总结-贪心算法
- LeetCode解题思路总结
- 算法第八周解题报告
- Leetcode解题思路总结(Easy)
- Leetcode解题思路总结(Medium)
- Leetcode解题思路总结(Easy)
- leetcode-python 第八周
- leetcode-第八周
- 第八周leetcode题
- 第八周LeetCode
- 第八周LeetCode
- jstat命令详解
- 简捷的python
- JS构造函数设计模式
- MongoDB配置参数详解
- Oralce 定时任务 调用存储过程
- leetcode第八周解题总结
- SpringMVC Controller介绍
- Unity网格介绍
- H.264 NAL层解析(0x00000001,编码,打包,NALU)
- error LNK2001: 无法解析的外部符号 "public: void __thiscall Cmfc_DeleteFileDlg::OnBnClickedButton3(void)"
- 20瓶药里面有19瓶真药和1瓶假药
- TCPServer与Client的通信代码
- 发现一个对于级联查询,批量更新十分有用的sql
- magent实现memcached集群方式