本题考查
二叉搜索树的建立与层序遍历
思路
很简单,写下博客的原因是提醒自己注意构建二叉树时的返回值,递归函数一层一层返回,若不返回的话,无法成功修改二叉搜索树
//别忘了调用函数返回的值要赋给root
public void add(int key) {root = add(key, root);}
private Node add(int key, Node r) {
if(r == null)
r = new Node(key);
else
if(r.key >= key)
r.leftChild = add(key, r.leftChild);//注意将左孩子修改后的值赋给左孩子
else
r.rightChild = add(key, r.rightChild);//注意将右孩子修改后的值赋给右孩子
return r; //注意最后返回
}
AC代码
import java.util.LinkedList;
import java.util.Scanner;
public class Main {
static class BST {
LinkedList<Integer> level;
class Node {
int key;
Node leftChild;
Node rightChild;
public Node(int key) {
this.key = key;
this.leftChild = null;
this.rightChild = null;
}
}
Node root;
public BST() {this.root = null;}
public void add(int key) {root = add(key, root);}
private Node add(int key, Node r) {
if(r == null)
r = new Node(key);
else
if(r.key >= key)
r.leftChild = add(key, r.leftChild);
else
r.rightChild = add(key, r.rightChild);
return r;
}
public void levelOrder() {
level = new LinkedList<Integer>();
levelOrder(root, 0);
if(level.size() >= 2)
System.out.println(level.getLast() + " + " + level.get(level.size() - 2) + " = " + (level.getLast()+level.get(level.size() - 2)));
else
System.out.println(level.getLast() + " + 0 = " + level.getLast());
}
private void levelOrder(Node r, int levelNum) {
if(level.size() < levelNum + 1) level.add(1);
else level.set(levelNum, level.get(levelNum) + 1);
if(r.leftChild != null) levelOrder(r.leftChild, levelNum + 1);
if(r.rightChild != null) levelOrder(r.rightChild, levelNum + 1);
}
}
public static void main(String[] args) {
Scanner scaner = new Scanner(System.in);
int round = scaner.nextInt();
BST tree = new BST();
for(int i = 0 ; i < round ; i++)
tree.add(scaner.nextInt());
scaner.close();
tree.levelOrder();
}
}