【算法刷题day20】Leetcode:654. 最大二叉树、617.合并二叉树、700. 二叉搜索树中的搜索、98.验证二叉搜索树
文章目录
- Leetcode 654. 最大二叉树
- 解题思路
- 代码
- 总结
- Leetcode 617.合并二叉树
- 解题思路
- 代码
- 总结
- Leetcode 700. 二叉搜索树中的搜索
- 解题思路
- 代码
- 总结
- Leetcode 98.验证二叉搜索树
- 解题思路
- 代码
- 总结
草稿图index.php/tags-333.html" class="superseo">网站
()java的Deque
Leetcode 654. 最大二叉树
题目:654. 最大二叉树
()解析:代码随想录解析
解题思路
NLR的建树
代码
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public TreeNode constructMaximumBinaryTree(int[] nums) { return buildTree(nums, 0, nums.length); } private TreeNode buildTree(int[] nums, int left, int right) { if (left == right) return null; if (left + 1 == right) return new TreeNode(nums[left]); int mid = left; int midNum = nums[left]; for (int i = left + 1; i midNum){ midNum = nums[i]; mid = i; } } TreeNode newNode = new TreeNode(midNum); newNode.left = buildTree(nums, left, mid); newNode.right = buildTree(nums, mid + 1, right); return newNode; } }
总结
暂无
Leetcode 617.合并二叉树
题目:617.合并二叉树
解析:代码随想录解析
解题思路
如果都为root1, root2都为空,返回null;如果root1为空,root2不为空,返回root2;如果roo1不为空,root2为空,返回root1,否则创建新节点,递归。
改进:以root1为主树,并对判断条件减枝。
代码
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public TreeNode mergeTrees(TreeNode root1, TreeNode root2) { if (root1 == null && root2 == null) return null; else if (root1 != null && root2 == null) return root1; else if (root1 == null && root2 != null) return root2; else { TreeNode newNode = new TreeNode(root1.val + root2.val); newNode.left = mergeTrees(root1.left, root2.left); newNode.right = mergeTrees(root1.right, root2.right); return newNode; } } } //改进,减少了一点点内存消耗 class Solution { public TreeNode mergeTrees(TreeNode root1, TreeNode root2) { if (root1 == null) return root2; if (root2 == null) return root1; root1.val = root1.val + root2.val; root1.left = mergeTrees(root1.left, root2.left); root1.right = mergeTrees(root1.right, root2.right); return root1; } } //前序遍历 class Solution { public TreeNode mergeTrees(TreeNode root1, TreeNode root2) { if (root1 == null) return root2; if (root2 == null) return root1; Stack stack = new Stack(); stack.push(root2); stack.push(root1); while (!stack.isEmpty()) { TreeNode node1 = stack.pop(); TreeNode node2 = stack.pop(); node1.val += node2.val; if (node1.right != null && node2.right != null){ stack.push(node2.right); stack.push(node1.right); } else { if (node1.right == null) node1.right = node2.right; } if (node1.left != null && node2.left != null) { stack.push(node2.left); stack.push(node1.left); }else { if (node1.left == null) node1.left = node2.left; } } return root1; } } //层序遍历 class Solution { public TreeNode mergeTrees(TreeNode root1, TreeNode root2) { if (root1 == null) return root2; if (root2 == null) return root1; Queue queue = new LinkedList(); queue.add(root1); queue.add(root2); while (!queue.isEmpty()) { TreeNode node1 = queue.poll(); TreeNode node2 = queue.poll(); node1.val += node2.val; if (node1.left != null && node2.left != null) { queue.add(node1.left); queue.add(node2.left); }else { if (node1.left == null) node1.left = node2.left; } if (node1.right != null && node2.right != null){ queue.add(node1.right); queue.add(node2.right); } else { if (node1.right == null) node1.right = node2.right; } } return root1; } }
总结
暂无
Leetcode 700. 二叉搜索树中的搜索
题目:700. 二叉搜索树中的搜索
解析:代码随想录解析
解题思路
代码
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public TreeNode searchBST(TreeNode root, int val) { if (root == null || root.val == val) return root; if (root.val val) return searchBST(root.left, val); return null; } } //不递归直接搜 class Solution { public TreeNode searchBST(TreeNode root, int val) { while (root != null) { if (val root.val) root = root.right; else return root; } return null; } }
总结
暂无
Leetcode 98.验证二叉搜索树
题目:98.验证二叉搜索树
解析:代码随想录解析
解题思路
中序遍历,记录上一个节点的值和现在的比,如果遍历完就返回true。
代码
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { private int pre = Integer.MIN_VALUE; public boolean isValidBST(TreeNode root) { if (root == null) return true; if (!isValidBST(root.left)) return false; if (root.val public boolean isValidBST(TreeNode root) { if (root == null) return true; Stack while (root != null) { stack.push(root); root = root.left; } TreeNode node = stack.pop(); if (pre != null && pre.val = node.val) return false; pre = node; node = node.right; } return true; } }
总结
暂无
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理!
部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!
图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!