package task1.basic; /** * 实现二叉树 * left总比父节点小 * right总比父节点大 */ public class WBinaryTreeNode { private Node root; private int size = 0; /** * 插入数据 * @param data */ public void insert(int data) { final Node newNode = new Node(data); if (root == null) {//根节点为空 直接插入数据到根节点 root = newNode; } else { Node current = root; while (true) {//循环判断 Node parent = current; if (data < current.data) {//比父节点小 就是left current = current.left; //直到left节点不存在 if (current == null) { //插入数据 parent.left = newNode; return; } } else {//比父节点大 也就是right current = current.right; //直到right节点不存在 if (current == null) { //插入数据 parent.right = newNode; return; } } } } size++; } /** * 返回数量 * @return */ public int size() { return size; } /** * 重写toString 方便打印 * * @return */ @Override public String toString() { return "["+midTraverse(root)+"]"; } /** * 节点内部类 用于保存数据 */ private static class Node { int data; Node left; Node right; Node(int data) { this.data = data; this.left = null; this.right = null; } } //先序遍历 private String preTraverse(Node node) { if (node == null) return ""; else return node.data + preJointComma(preTraverse(node.left)) + preJointComma(preTraverse(node.right)); } //中序遍历 private String midTraverse(Node node) { if (node == null) return ""; else return midTraverse(node.left)+" "+node.data+" " +midTraverse(node.right); } //后序遍历 private String posTraverse(Node node) { if (node == null) return ""; else return posTraverse(node.left)+" " +posTraverse(node.right)+" "+node.data; } private String preJointComma(String str) { return str == "" ? "" : "," + str; } }