码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树

时间:2017-03-05 00:11:06      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:test   建二叉树   nod   eth   code   后序遍历   get   set   private   

package com.m01.program.maven_1;

import java.util.Stack;

public class TestBinaryTree {

    public static void main(String[] args) {
        TreeNode node=getBinaryTree();
        node=destroy(node);
        System.out.println(node);
        Stack<TreeNode> s=new Stack();
        
    }
    //创建二叉树
    static TreeNode getBinaryTree(){
        TreeNode node1=new TreeNode("A");
        TreeNode node2=new TreeNode("B");
        TreeNode node3=new TreeNode("C");
        TreeNode node4=new TreeNode("BB1");
        TreeNode node5=new TreeNode("BB2");
        TreeNode node6=new TreeNode("CC1");
        TreeNode node7=new TreeNode("CC2");
        node1.setLeftNode(node2);
        node1.setRightNode(node3);
        node2.setLeftNode(node4);
        node2.setRightNode(node5);
        node3.setLeftNode(node6);
        node3.setRightNode(node7);
        return node1;
    }
    //输出节点
    static void out(TreeNode<?> node){
        System.out.println(node.getData());
    }
    //先序遍历二叉树
    static void xianIterator(TreeNode<?> node){
        out(node);
        TreeNode leftNode=node.getLeftNode();
        TreeNode rightNode=node.getRightNode();
        if(leftNode!=null){
            xianIterator(leftNode);
        }
        if(rightNode!=null){
            xianIterator(rightNode);
        }
    }
    //中序遍历二叉树
    static void zhongIterator(TreeNode<?> node){
        TreeNode<?> leftNode=node.getLeftNode();
        TreeNode<?> rightNode=node.getRightNode();
        if(leftNode!=null){
            zhongIterator(leftNode);
        }
        out(node);
        if(rightNode!=null){
            zhongIterator(rightNode);
        }
    }
    //后序遍历二叉树
    static void houIterator(TreeNode<?> node){
        TreeNode<?> leftNode=node.getLeftNode();
        TreeNode<?> rightNode=node.getRightNode();
        if(rightNode!=null){
            out(rightNode);
        }
        if(leftNode!=null){
            out(leftNode);
        }
        out(node);
    }
    //判断 二叉树的高度
    public static int getHeight(TreeNode<?> node){
        if(node==null){
            return 0;
        }else{
            int left=getHeight(node.getLeftNode());
            int right=getHeight(node.getRightNode());
            return left>=right?left+1:right+1;
        }
    }
    //得到树中的对象数量
    public static int getAllObjs(TreeNode<?> node){
        if(node==null){
            return 0;
        }else{
            TreeNode leftNode=node.getLeftNode();
            TreeNode rightNode=node.getRightNode();
            int leftNum=getAllObjs(leftNode);
            int rightNum=getAllObjs(rightNode);
            return leftNum+rightNum+1;
        }
    }
    //删除node以及其以下的数据
    static TreeNode<?> destroy(TreeNode<?> node){
        System.out.println("--");
        if(node!=null){
            TreeNode leftNode=node.getLeftNode();
            TreeNode rightNode=node.getRightNode();
            destroy(leftNode);
            destroy(rightNode);
            node=null;
        }
        return node;
    }
}
/*
 * 定义节点
 */
class TreeNode<T>{
    private T data;
    private TreeNode<T> leftNode;
    private TreeNode<T> rightNode;
    
    public TreeNode() {
        
    }
    public TreeNode(T data, TreeNode<T> leftNode, TreeNode<T> rightNode) {
        super();
        this.data = data;
        this.leftNode = leftNode;
        this.rightNode = rightNode;
    }
    public TreeNode(T data) {
        this.data = data;
    }
    public TreeNode<T> getLeftNode() {
        return leftNode;
    }
    public void setLeftNode(TreeNode<T> leftNode) {
        this.leftNode = leftNode;
    }
    public TreeNode<T> getRightNode() {
        return rightNode;
    }
    public void setRightNode(TreeNode<T> rightNode) {
        this.rightNode = rightNode;
    }
    public T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }
    @Override
    public String toString() {
        return "TreeNode [data=" + data + ", leftNode=" + leftNode + ", rightNode=" + rightNode + "]";
    }
    
}

 

二叉树

标签:test   建二叉树   nod   eth   code   后序遍历   get   set   private   

原文地址:http://www.cnblogs.com/m01qiuping/p/6503135.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!