【JAVA】【刷题子】1305. 两棵二叉搜索树中的所有元素

158 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情

一、题目与题目分析

题目

给你 root1 和 root2 这两棵二叉搜索树。请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序。
(题目来源:力扣:1305. 两棵二叉搜索树中的所有元素
image.png

题目分析

  分析前是需要了解二叉树的定义。(二叉树定义可参考:点击跳转 百度百科
  接下来,再来分析题目。就是提供两个二叉树,让咱们进行遍历获取所有的元素,并且最终是有序上升的排序。
  看示例不懂,我们再来打个例子,root1=[5,2,0],root2=[1,0];只需要把它们放一块也就是root1 + root2 = [5,2,0,1,0];得到的结果再进行排序,并且是完成升序。最终就要呈现的是[0,0,1,2,5]就是最终的答案了~
  总结:分两步走,第一步先获取所有二叉树的所有节点的value值;第二步,排序它们为升序。
  理解了这些,我们再步入代码设计和整体逻辑就容易了。

二、整体逻辑与主要代码

  在上面,我们提到要先把root1和root2进行获取对应的所有节点(根节点、叶子节点)的value值;再把它们排序。

整体逻辑

暴力迭代解题,先把对应的一个二叉树的所有节点value值获取;再获取另外一个二叉树。最后用现成的排序方法(Collections.sort(List<Integer>))进行排序。

主要代码

整体逻辑也有了,我们直接来看代码吧! (如有不懂的或者更好的建议,欢迎评论区分享友友的看法哈~)

/**
 * 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 List<Integer> getAllElements(TreeNode root1, TreeNode root2) {
		List<Integer> list = new ArrayList<>();
		// 获取root1的所有value
		getVal(list, root1);
		// 获取root2的所有value
		getVal(list, root2);
		// 排序方法(有现成封装好的,就用人家的~ 避免造轮子)
		Collections.sort(list);
		return list;
	}

	// 迭代获取对应TreeNode的所有节点(根节点、叶子节点)的value值
	public void getVal(List<Integer> list, TreeNode root) {
		if (root == null) {
			// 迭代出口
			return;
		}
		// 当前节点的value存入
		list.add(root.val);
		// 左孩节点继续迭代
		getVal(list, root.left);
		// 右孩节点继续迭代
		getVal(list, root.right);
	}
}

三、结果展示

image.png

四、总结

  本来今天是想解今日(2022年5月31日)的力扣签到题(114. 外星文字典)的,看到是困难级别的,打着不退缩的念头,想尝试一下。但是发现题目都不清楚想要具体要怎么做;努力了一下,还是先放弃吧。
  看来还是得多刷题。
  总结,碰到问题,如果已经问题都看不懂了,可以先放一放,换个问题,先去解决别的已知的问题;尽量不要降低自己的兴趣度,给自己太大的压力...
  遇到不顺心的时候,受到挫折的时候;偶尔的摆上一摆,其实也没什么的!

题目数据库

Gitee:传送门

文章小尾巴

文章写作、模板、文章小尾巴可参考:《写作“小心思”》
  感谢你看到最后,最后再说两点~
  ①如果你持有不同的看法,欢迎你在文章下方进行留言、评论。
  ②如果对你有帮助,或者你认可的话,欢迎给个小点赞,支持一下~
  我是南方者,一个热爱计算机更热爱祖国的南方人。

  (文章内容仅供学习参考,如有侵权,非常抱歉,请立即联系作者删除。)