当前位置: 首页 > 知识库问答 >
问题:

合并2个二叉树-简单

蒋培
2023-03-14

我正在尝试合并2棵二叉树,而不用担心使结果树平衡。这是我的解决方案,但不起作用。为什么Treenode ans和head从合并函数返回时设置为0。正如我所理解的,由于TreeNode不是原始类型,因此指向ans的head应该在调用合并函数后使用生成的树更新https://leetcode.com/problems/merge-two-binary-trees/

/**
 * 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) {
        
        
        
        TreeNode ans = new TreeNode();
        TreeNode head = ans;
        
        if(root1!=null && root2==null)
            return root1;
        else if (root1==null && root2!=null)
            return root2;
        else if (root1!=null &&root2!=null)
            merge (root1, root2,ans) ;   
            
            return head;
            
        
    }
    
    void merge (TreeNode root1, TreeNode root2,TreeNode ans)
    {
         if(root1!=null && root2==null)
            root2 = new TreeNode(0);
        
         else if (root1==null && root2!=null)
            root1 = new TreeNode(0);
         else if(root1==null &&root2==null)
         return;
        
            ans = new TreeNode(root1.val+root2.val); 
              merge(root1.left,root2.left,ans.left);
                merge(root1.right,root2.right,ans.right);          
    }
    
}

共有1个答案

江超英
2023-03-14

问题是变量headans不会像您期望的那样更新。Java是按值传递的,如这里所解释的。这意味着ans是一个引用,您将其值传递给函数合并,然后在那里覆盖。

您还可以通过每次递归调用merge重新分配ans的值。要返回正确的值,您需要在第一次调用时返回分配给该变量的值。

希望这有帮助。

 类似资料:
  • 2. 二叉树 2.1. 二叉树的基本概念 链表的每个节点可以有一个后继,而二叉树(Binary Tree)的每个节点可以有两个后继。比如这样定义二叉树的节点: typedef struct node *link; struct node { unsigned char item; link l, r; }; 这样的节点可以组织成下图所示的各种形态。 图 26.9. 二叉树的定义和举例 二叉树可

  • 我正在研究合并两个二叉树的问题(https://www.geeksforgeeks.org/merge-two-binary-trees-node-sum/)我很难理解一些递归。为什么要将递归语句设置为和?当你这样做的时候,是否等于两个值? 我只是不确定为什么我们要将递归语句设置为t1.leftt1.right'

  • 我已经在“合并两棵二叉树”上工作了好几个小时了,我不明白为什么我的代码不起作用。树t1被指定为[1,3,2,5],树t2被指定为[2,1,3,null,4,null,7],我必须通过对重叠节点求和并尽可能避免null来合并这两棵树,因此结果应该是[3,4,5,5,4,null,7]。我不是像我应该的那样创建一棵新树,而是重写树t1以获得所需的结果。我的代码如下: 我的代码运行时没有错误,我的最终结

  • 问题是: 给定两棵二叉树,想象一下,当您将其中一棵树覆盖另一棵树时,两棵树的一些节点重叠,而其他节点则不重叠。 您需要将它们合并到一个新的二叉树中。合并规则是,如果两个节点重叠,则将节点值加起来作为合并节点的新值。否则,非空节点将用作新树的节点。 注意:合并过程必须从两棵树的根节点开始。 我试图解决这个leetcode问题,但总是得到错误的答案。 我的答案是: 似乎我丢失了节点4和节点7。 然而,

  • HLOJ 9576,习题7-2 二叉排序树 输入一个整数关键字序列,生成一棵用链式存储结构存储的二叉排序树,对该二叉排序树能进行查找和插入结点的操作,并对该二叉排序树中结点的关键字按递增和递减顺序输出。 要求依次完成以下工作: (1) 以这n个整数生成(建立)一棵用链式存储结构存储的二叉排序树; (2) 按递增顺序输出该二叉排序树中的整数(关键字); (3) 输入一个整数key1,对该二叉排序树进

  • 二叉树 二叉树采用二叉链表存储,要求根据给定的先序遍历序列和中序遍历序列建立二叉树,并输出后序遍历序列、结点总数、叶子数、度为1的结点数、度为2的结点数。 输入格式: 测试数据有多组,处理到文件尾。每组测试数据的第一行输入结点数n(1≤n≤10),第二、三行各输入n个整数,分别表示二叉树的先序遍历序列和中序遍历序列。 输出格式: 对于每组测试,在一行上分别输出该二叉树的后序遍历序列,结点总数,叶子