Java 实现二叉树插入和遍历

#定义节点类

package com.drj.tree;
/**
*

  • @ClassName: TreeNode
  • @Description:TODO(代表树节点)
  • @author: drj
  • @date: 2018年8月22日 下午9:32:13
  • @Copyright: 2018

*/

public class TreeNode {
private TreeNode leftTreeNode;
private TreeNode rightTreeNode;
private String value;

public TreeNode getLeftTreeNode() {
    return leftTreeNode;
}

public void setLeftTreeNode(TreeNode leftTreeNode) {
    this.leftTreeNode = leftTreeNode;
}

public TreeNode getRightTreeNode() {
    return rightTreeNode;
}

public void setRightTreeNode(TreeNode rightTreeNode) {
    this.rightTreeNode = rightTreeNode;
}

public String getValue() {
    return value;
}

public void setValue(String value) {
    this.value = value;
}

public TreeNode(String value) {
    super();
    this.value = value;
}

@Override
public String toString() {
    return "TreeNode [leftTreeNode=" + leftTreeNode + ", rightTreeNode=" + rightTreeNode + ", value=" + value + "]";
} }

#实现插入、遍历

package com.drj.tree;

/**
*

  • @ClassName: BinaryTree
  • @Description:TODO(二叉树实现)
  • @author: drj
  • @date: 2018年8月22日 下午9:46:02
  • @Copyright: 2018

*/

public class BinaryTree {
private TreeNode root;

public TreeNode getRoot() {
    return root;
}

/**
 * 插入二叉树排序 有序插入 (大于根节点放右边 小于根节点放左边)
 * 暂时没有处理相同节点  正常严谨二叉树不能出现相同节点
 * @param value
 */
public void insert(String value) {

    TreeNode newNode = new TreeNode(value);
    if (root == null) {
        root = newNode;
        root.setLeftTreeNode(null);
        root.setRightTreeNode(null);
    } else {
        TreeNode currentNode = root;
        TreeNode parentNode;
        // 有孩子继续循环,一直循环到最后一个节点 和插入的节点比较 大的放到右节点,小于放到左节点
        while (true) {
            parentNode = currentNode;
            // 往右放
            if (Integer.valueOf(newNode.getValue()) > Integer.valueOf(currentNode.getValue())) {
                currentNode = currentNode.getRightTreeNode();
                if (currentNode == null) {
                    parentNode.setRightTreeNode(newNode);
                    return;
                }
            } else {
                // 往左放
                currentNode = currentNode.getLeftTreeNode();
                if (currentNode == null) {
                    parentNode.setLeftTreeNode(newNode);
                    return;
                }
            }
        }
    }
}

/**
 * 中序遍历
 * 
 * @param treeNode
 */
public void inOrder(TreeNode treeNode) {
    if (treeNode != null) {
        inOrder(treeNode.getLeftTreeNode());
        System.out.print(" " + treeNode.getValue() + " ");
        inOrder(treeNode.getRightTreeNode());
    }
}

/**
 * 后序遍历
 * 
 * @param treeNode
 */
public void afterOrder(TreeNode treeNode) {
    if (treeNode != null) {
        afterOrder(treeNode.getLeftTreeNode());
        afterOrder(treeNode.getRightTreeNode());
        System.out.print(" " + treeNode.getValue() + " ");
    }
}

/**
 * 先序遍历
 * 
 * @param treeNode
 */
public void beforeOrder(TreeNode treeNode) {
    if (treeNode != null) {
        System.out.print(" " + treeNode.getValue() + " ");
        beforeOrder(treeNode.getLeftTreeNode());
        beforeOrder(treeNode.getRightTreeNode());
    }
}

public static void main(String[] args) {
    BinaryTree tree = new BinaryTree();
    tree.insert("5");
    tree.insert("7");
    tree.insert("4");
    tree.insert("8");
    tree.insert("6");
    tree.insert("2");
    tree.insert("3");
    tree.insert("9");
    System.out.println(tree.root);
    tree.beforeOrder(tree.getRoot());
    System.out.println();
    tree.inOrder(tree.getRoot());
    System.out.println();
    tree.afterOrder(tree.getRoot());

} }

#结果
测试

#本测试二叉树
二叉树

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜗牛乌龟一起走

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值