原文地址:https://www.geeksforgeeks.org/insertion-in-a-binary-tree-in-level-order/
给定一个二叉树和一个数据,按层次寻找第一个可用的位置将数据插入二叉树中
在遍历的过程中,如果我们发现一个节点的左节点是空的,我们可以用给定的数据new一个节点插入左子节点。对于右子节点同理。
package bst;
import java.util.LinkedList;
import java.util.Queue;
public class GFG {
//一个树节点有三个关键点:左子树指针,右子树指针,数据部分,
//这里我们用int作为数据部分,实际应用中key的数据类型可以是任意的数据类型
static class Node {
int key;
Node left, right;
Node(int key){
this.key = key;
left = null;
right = null;
}
}
static Node root;
static Node temp = root;
//在遍历二叉树的时候分为两大类,一种是BFS(广度优先遍历)即Breadth FirstSearch
//一种是DFS(深度优先遍历)即Depth First Search,深度优先遍历又分为前序,中序和后序。
static void inorder(Node temp)
{
if (temp == null)
return;
inorder(temp.left);
System.out.print(temp.key+" ");
inorder(temp.right);
}
//插入节点
static void insert(Node temp, int key)
{
Queue<Node> q = new LinkedList<Node>();
q.add(temp);
// 层次遍历,直到寻找到一个可用的位置插入节点
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);
}
}
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);
}
}