/* * Created by Harry 2017-2-23 10:50:39 * 实现二叉树,并按二叉查找树插入节点 * */ package com.github.HarryHook.coding2017.basic; public class BinaryTreeNode { private Integer data; private BinaryTreeNode left; private BinaryTreeNode right; // 中序遍历二叉树 public void inOrder(BinaryTreeNode node) { if (node != null) { inOrder(node.left); System.out.print(" " + node.data); inOrder(node.right); } } // 获取给节点的值 public Integer getData() { return data; } // 给一个节点赋值 public void setData(Integer data) { this.data = data; } // 获取左节点 public BinaryTreeNode getLeft() { return left; } // 指定左节点 public void setLeft(BinaryTreeNode left) { this.left = left; } // 获取右节点 public BinaryTreeNode getRight() { return right; } // 指定右节点 public void setRight(BinaryTreeNode right) { this.right = right; } // 在二叉树中插入一个节点,需要判断 public BinaryTreeNode insert(Integer obj) { // 新增节点 BinaryTreeNode newNode = new BinaryTreeNode(); // 当前节点,保留根的值 BinaryTreeNode current = this; // 上个节点 BinaryTreeNode parent = null; // 如果根节点为空 if (current.data == null) { newNode.setData(obj); newNode.setLeft(null); newNode.setRight(null); return newNode; } else { while (true) { parent = current; if (obj < current.data) { current = current.left; if (current == null) { newNode.setData(obj); newNode.setLeft(null); newNode.setRight(null); parent.left = newNode; return newNode; } } else { current = current.right; if (current == null) { newNode.setData(obj); newNode.setLeft(null); newNode.setRight(null); parent.right = newNode; return newNode; } } } } } public static void main(String[] args) { BinaryTreeNode BTN = new BinaryTreeNode(); BTN = BTN.insert(5); System.out.print(BTN.getData() + " "); System.out.print(BTN.insert(2).getData() + " "); System.out.print(BTN.insert(1).getData() + " "); System.out.print(BTN.insert(4).getData() + " "); System.out.print(BTN.insert(6).getData() + " "); System.out.print(BTN.insert(8).getData() + " "); System.out.println(""); System.out.println("中序遍历二叉树: "); BTN.inOrder(BTN); } }