嗨,我正在阅读在二叉树中插入值,但是发现使用Java理解树的递归遍历比较困难。 这是代码:
// Java program to insert element in binary tree
import java.util.LinkedList;
import java.util.Queue;
public class GFG {
/* A binary tree node has key, pointer to
left child and a pointer to right child */
static class Node {
int key;
Node left, right;
// constructor
Node(int key){
this.key = key;
left = null;
right = null;
}
}
static Node root;
static Node temp = root;
/* Inorder traversal of a binary tree*/
static void inorder(Node temp)
{
if (temp == null)
return;
inorder(temp.left);
System.out.print(temp.key+" ");
inorder(temp.right);
}
/*function to insert element in binary tree */
static void insert(Node temp, int key)
{
Queue<Node> q = new LinkedList<Node>();
q.add(temp);
// Do level order traversal until we find
// an empty place.
while (!q.isEmpty()) {
temp = q.peek();
q.remove();
if (temp.left == null) {
temp.left = new Node(key);
break;
} else
q.add(temp.left);
if (temp.right == null) {
temp.right = new Node(key);
break;
} else
q.add(temp.right);
}
}
// Driver code
public static void main(String args[])
{
root = new Node(10);
root.left = new Node(11);
root.left.left = new Node(7);
root.right = new Node(9);
root.right.left = new Node(15);
root.right.right = new Node(8);
System.out.print( "Inorder traversal before insertion:");
inorder(root);
int key = 12;
insert(root, key);
System.out.print("\nInorder traversal after insertion:");
inorder(root);
}
}
有人可以解释此inorder()方法如何工作吗?对我来说,它永远不会终止,因为它将继续不断地传递null值,并且if循环内的return语句只会循环出循环而不是整个方法。
答案 0 :(得分:3)
inorder
被称为recursively。
在给定的方法调用中,我们首先传递树的左节点,然后传递右节点。然后,这些调用将调用左侧节点或右侧节点的方法,但是-如果该节点为null,则它会提早返回。树不是无限的-因此,在某个点上,节点的左右节点必须为null,这时该方法会提前返回并且不会继续。因此,递归在某些时候被安全地破坏了。
另外if
不是循环-这是一个条件语句。在if中调用return
会从整个方法返回,而不仅仅是走出if语句。您必须与之混淆的是break。