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);
        }

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以帮你解决这些问题。以下是代码实现: ```python class TreeNode: def __init__(self, val=None): self.val = val self.left = None self.right = None class BST: def __init__(self): self.root = None def insert(self, val): if not self.root: self.root = TreeNode(val) else: self._insert(val, self.root) def _insert(self, val, node): if val < node.val: if not node.left: node.left = TreeNode(val) else: self._insert(val, node.left) else: if not node.right: node.right = TreeNode(val) else: self._insert(val, node.right) def inorder_traversal(self): if not self.root: return [] else: return self._inorder_traversal(self.root) def _inorder_traversal(self, node): res = [] if node: res = self._inorder_traversal(node.left) res.append(node.val) res = res + self._inorder_traversal(node.right) return res def search(self, val): if not self.root: self.root = TreeNode(val) else: self._search(val, self.root) def _search(self, val, node): if val < node.val: if not node.left: node.left = TreeNode(val) else: self._search(val, node.left) elif val > node.val: if not node.right: node.right = TreeNode(val) else: self._search(val, node.right) def postorder_traversal(self): if not self.root: return [] else: return self._postorder_traversal(self.root) def _postorder_traversal(self, node): res = [] if node: res = self._postorder_traversal(node.left) res = res + self._postorder_traversal(node.right) res.append(node.val) return res def __del__(self): self._delete_tree(self.root) def _delete_tree(self, node): if node: self._delete_tree(node.left) self._delete_tree(node.right) print("Deleting node:", node.val) del node ``` 代码的解释: - `TreeNode` 类定义了二叉树节点的结构,包含一个值和左右子节点。 - `BST` 类定义了二叉排序树,包含一个根节点。它实现了插入节点、中序遍历、搜索节点、后序遍历和释放二叉树的功能。 - `_insert` 方法是一个递归方法,用于将新节点插入到二叉排序树中。 - `inorder_traversal` 方法实现了中序遍历,并返回遍历结果。 - `_search` 方法是一个递归方法,用于搜索二叉排序树中是否存在指定值的节点。如果不存在,则将新节点插入到二叉排序树中。 - `postorder_traversal` 方法实现了后序遍历,并返回遍历结果。 - `_delete_tree` 方法是一个递归方法,用于释放整个二叉排序树。它依次删除每个节点,并输出节点的值。 以下是测试代码: ```python bst = BST() # 插入节点 bst.insert(5) bst.insert(2) bst.insert(8) bst.insert(1) bst.insert(4) bst.insert(7) bst.insert(9) # 中序遍历 print("Inorder Traversal:", bst.inorder_traversal()) # 搜索节点 bst.search(6) bst.search(3) # 中序遍历 print("Inorder Traversal:", bst.inorder_traversal()) # 后序遍历 print("Postorder Traversal:", bst.postorder_traversal()) # 释放二叉排序树 del bst ``` 输出结果: ``` Inorder Traversal: [1, 2, 4, 5, 7, 8, 9] Inorder Traversal: [1, 2, 3, 4, 5, 6, 7, 8, 9] Postorder Traversal: [1, 4, 2, 7, 9, 8, 5] Deleting node: 1 Deleting node: 4 Deleting node: 2 Deleting node: 7 Deleting node: 9 Deleting node: 8 Deleting node: 5 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大鱼qss

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值