Java 我的问题是关于find(Node root,int-level)方法。这是关于在给定的二叉树中查找最深节点的代码

Java 我的问题是关于find(Node root,int-level)方法。这是关于在给定的二叉树中查找最深节点的代码,java,Java,在find(Node root,int-level)方法中,if(!=null)语句给我带来了困惑。假设到达二叉树的最后一个节点时,左边的节点指向NULL。语句find(root.left,++level)再次递归调用find()方法。现在,节点指向NULL。因此if(root!=null)不会执行。不过,代码运行良好,下一行代码在find()方法中执行。有人能向我解释一下,当if(root!=null)为false时,应该跳过整个if()块吗 //Java程序来查找最深节点的值 //在给定的二

在find(Node root,int-level)方法中,if(!=null)语句给我带来了困惑。假设到达二叉树的最后一个节点时,左边的节点指向NULL。语句find(root.left,++level)再次递归调用find()方法。现在,节点指向NULL。因此if(root!=null)不会执行。不过,代码运行良好,下一行代码在find()方法中执行。有人能向我解释一下,当if(root!=null)为false时,应该跳过整个if()块吗

//Java程序来查找最深节点的值 //在给定的二叉树中 GFG类 {


}

您的算法正在二叉树上递归搜索,为此,您需要在节点之间导航,如果您到达
null
节点,则无法从该节点找到更远的位置


因此,基本上,您需要使用
if
跳过整个块,因为空节点没有子节点。

您的算法在二叉树上递归搜索,为此,您需要在节点之间导航,如果您到达
null
节点,则无法从该节点找到更多


因此,基本上,您需要使用
if
跳过整个块,因为空节点没有子节点。

如果
node
参数为空,则表示我们已经跑完树的末尾,应该“返回”

null的测试必须在某个地方进行。将方法放在顶部意味着只需对其编码一次

另一个选项是在进行递归调用之前对其进行编码,因此我们永远不会通过
null
in,但是测试必须编码3次:在左调用之前编码一次,在右调用之前编码一次,在初始调用之前编码一次


root
是参数的坏名称,应将其称为
node
。仅仅因为对它的第一次调用在根中传递,并不意味着我们应该给它命名。

如果
节点
参数为null,则意味着我们已经跑过了树的末尾,应该“返回”

null的测试必须在某个地方进行。将方法放在顶部意味着只需对其编码一次

另一个选项是在进行递归调用之前对其进行编码,因此我们永远不会通过
null
in,但是测试必须编码3次:在左调用之前编码一次,在右调用之前编码一次,在初始调用之前编码一次

root
是参数的坏名称,应将其称为
node
。仅仅因为对它的第一个调用在根中传递,并不意味着我们应该给它命名

// 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) **//THIS BLOCK SHOULD BE SKIPPED** 
    { 
        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(50); 
    System.out.println(deepestNode(root)); 
}