【发布时间】:2019-08-26 03:39:45
【问题描述】:
您好,我正在阅读二叉树中的值插入,但我发现很难理解使用 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() 方法是如何工作的吗?对我来说,它永远不应该终止,因为它会一次又一次地传递空值,并且 if 循环中的 return 语句只会循环出循环而不是整个方法。
【问题讨论】:
-
你显然不懂递归,查一下。代码非常清晰,如果传递给
inorder的节点是null,它将不再向下进入树。 -
在 youtube 或任何其他平台上寻找一棵树的中序遍历,你可以找到有详细解释的。
标签: java recursion data-structures binary-tree insertion