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

查找二叉树的最深节点。如果多个节点处于最深处,则返回最右边的节点。(答案在说明中)

乌翔
2023-03-14

最近我一直在做个人项目,这个错误总是出现。异步是无效的,除非有一个我不知道的await函数,但这段代码给了我一个错误。我的代码没有一个异步函数,所以试图删除它是如此的烦人。我确实删除了它,查看答案以获得更多信息,如果你想复制代码。

// Java program to find value of the deepest node
// in a given binary tree
class GFG
{
 
    // A tree node
    static class Node
    {
 
        int dataa;
        Node left, right;
 
        Node(int key)
        {
            data = key;
            left = null;
            right = null;
        }
    }
    static int maxLevel = -1;
    static int res = -1;
 
    // maxLevel : keeps track of maximum level seen so far.
    // res : Value of deepest node so far.
    // level : Level of root
    static void find(Node root, int level)
    {
        if (root != null)
        {
            find(root.left, ++level);
 
            // Update level and resue
            if (level > maxLevel)
            {
                res = root.data;
                maxLevel = level;
            }
 
            find(root.right, level);
        }
    }
 
    // Returns value of deepest node
    static int deepestNode(Node root)
    {
        // Initialze result and max level
        /* int res = -1;
        int maxLevel = -1; */
 
        // Updates value "res" and "maxLevel"
        // Note that res and maxLen are passed
        // by reference.
        find(root, 0);
        return res;
    }
 
    // Driver code
    public static void main(String[] args)
    {
 
        Node root = new Node(1);
        root.left = new Node(2);
        root.right = new Node(3);
        root.left.left = new Node(4);
        root.right.left = new Node(5);
        root.right.right = new Node(6);
        root.right.left.right = new Node(7);
        root.right.right.right = new Node(8);
        root.right.left.right.left = new Node(9);
        System.out.println(deepestNode(root));
    }
}
 

共有1个答案

桑思远
2023-03-14

所以它给我那个愚蠢错误的原因是:

int dataa;

我不停地打电话给int Dataa;作为int数据,正因为如此,Node认为给我(可能还有所有有相同问题的人)同样错误的异常处理是很有趣的。代码中的一些其他东西也给出了错误的异常处理,无论如何,如果需要的话,只需复制这段代码即可。然而,这只是一个拼写错误,这不是唯一的问题,我修复了int数据;我在处理垃圾的时候遇到了更多的问题。(ps.我试着把错误和问题的解决方案放进去,但是字符太多了,我不得不把它缩短。如果你需要的话就把代码拷贝过来!)

// Java program to find value of the deepest node
// in a given binary tree
class GFG
{

    // A tree node
    static class Node
    {

        int data;
        Node left, right;

        Node(int key)
        {
            data = key;
            left = null;
            right = null;
        }
    }
    static int maxLevel = -1;
    static int res = -1;

    // maxLevel : keeps track of maximum level seen so far.
    // res : Value of deepest node so far.
    // level : Level of root
    static void find(Node root, int level)
    {
        if (root != null)
        {
            find(root.left, ++level);

            // Update level and reuse
            if (level > maxLevel)
            {
                res = root.data;
                maxLevel = level;
            }

            find(root.right, level);
        }
    }

    // Returns value of deepest node
    static int deepestNode(Node root)
    {
        // Initialze result and max level
        /* int res = -1;
        int maxLevel = -1; */

        // Updates value "res" and "maxLevel"
        // Note that res and maxLen are passed
        // by reference.
        find(root, 0);
        return res;
    }

    // Driver code
    public static void main(String[] args)
    {

        Node root = new Node(1);
        root.left = new Node(2);
        root.right = new Node(3);
        root.left.left = new Node(4);
        root.right.left = new Node(5);
        root.right.right = new Node(6);
        root.right.left.right = new Node(7);
        root.right.right.right = new Node(8);
        root.right.left.right.left = new Node(9);
        System.out.println(deepestNode(root));
    }
}

这就是为什么节点是最好的编程,因为它使您的生活地狱数小时!把这个问题投多一点,这样其他人就不投了

 类似资料:
  • 我被这个问题的修改版本困住了(在二叉树中找到距离为k的两个节点)。 我试图定义两个节点之间的距离,我认为这是沿着树状分支从节点n1移动到节点n2所需的最小节点数。 从这个假设出发,我得到了一个情况,我认为我需要知道每个节点是在根的左边还是右边。 案例1:如果n1和n2位于不同的一侧,那么我爬到根部(距离等于节点n1的深度-假设n1位于左侧),然后向下跑到右侧节点n2(距离等于节点n2的深度)。所以

  • 我坚持使用递归函数来查找二叉树中节点的深度,更具体地说,是在else条件中: 如果树是二叉搜索树,知道左子值总是低于父值,右子值总是高于父值,我可以添加一个If条件,这样如果节点x值低于根,我总是返回根- 当查看函数时,假设节点总是存在的,节点x永远不是根,并且在开始时传递的深度总是0。 如果树是二叉搜索:

  • 我试图打印我的二叉搜索树的每个节点的所有值和深度。我很难想出一种递归计算深度的方法。到目前为止,我有一种仅打印树的每个值的方法。我将不胜感激一些指导,因为我觉得我让它变得比应有的更难。

  • 在find(Node root,int level)方法中,if(!=null)语句给我造成了混乱。假设到达二叉树的最后一个节点时,左边的节点指向NULL。语句find(root.left,++level)再次递归调用find()方法。现在,节点指向null。因此if(root!=null)不会执行。尽管如此,代码运行良好,下一行代码将在find()方法中执行。谁能给我解释一下,当if(root!

  • 我有一个二叉树,我想打印所有非边界节点。边界节点:-所有叶节点从根到最左节点路径上的所有节点所有节点从根到最右节点。 我在树结构中使用了一个额外的布尔值来确定它是否是边界节点,如果不是边界节点,则进行遍历和打印。有人能想出一个更好的方法吗,因为它使用了一些额外的空间(虽然很少)。

  • 我现在正在读一本关于从二叉搜索树中删除节点的书,书中描述的过程对我来说似乎不必要地复杂。 在1号情况下,如果我们删除40,它将替换为30;在 2 号情况下,如果我们删除 40,它将被替换 35。 但在书中,它说应该从要删除的节点的右子树中找到替换,这可能涉及一些复杂的操作。 我在这里遗漏了什么吗?请指出。