1305. 两棵二叉搜索树中的所有元素(中序遍历)
给你 root1 和 root2 这两棵二叉搜索树。请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序。.
示例 1:
输入:root1 = [2,1,4], root2 = [1,0,3] 输出:[0,1,1,2,3,4] 示例 2:
输入:root1 = [1,null,8], root2 = [8,1] 输出:[1,1,8,8]
提示:
每棵树的节点数在 [0, 5000] 范围内 -105 <= Node.val <= 105
自己的做法: 二叉搜索树那么直接中序遍历便会得到一个顺序的结果,可以先把顺序的结果暂存下来,然后这个问题变成了合并两个有序数组的问题,直接双指针结束。
中序遍历的递归代码如下:
会把结果存在ans列表里
private void Inorder(TreeNode root , List<Integer> ans) { if(root == null) return; else { Inorder(root.left ,ans); ans.add(root.val); Inorder(root.right,ans); } }
总体代码如下:
class Solution { public List<Integer> getAllElements(TreeNode root1, TreeNode root2) { List<Integer> ans1 = new ArrayList<Integer>(); List<Integer> ans2 = new ArrayList<Integer>(); List<Integer> ans = new ArrayList<Integer>(); Inorder(root1,ans1); Inorder(root2,ans2); int n = ans1.size(); int m = ans2.size(); int i = 0 , j = 0; while (i < n && j < m) { if(ans1.get(i) < ans2.get(j)) { ans.add(ans1.get(i)); i++; } else { ans.add(ans2.get(j)); j++; } } while ( i < n) { ans.add(ans1.get(i)); i++; } while (j < m) { ans.add(ans2.get(j)); j++; } return ans; } private void Inorder(TreeNode root , List<Integer> ans) { if(root == null) return; else { Inorder(root.left ,ans); ans.add(root.val); Inorder(root.right,ans); } } }