java手写二叉树

KLQ 2020-08-11 16:00:12 java常见问答 4887

下面要给大家带来的就是一个java手写二叉树的内容,一起来通过详细的文章内容,来进行一下了解吧,希望可以对你的java编程之路有所帮助哦。

package com.model;
import java.util.ArrayList;
import java.util.List;
public class Tree
{
    public Node getRoot()
    {
        return root;
    }
    public void setRoot(Node root)
    {
        this.root = root;
    }
    public List < Node > getResult()
    {
        return result;
    }
    public void setResult(List < Node > result)
    {
        this.result = result;
    }
    public Tree()
    {
        init();
    }
    private void init()
    {
        Node x = new Node("X", null, null);
        Node y = new Node("Y", null, null);
        Node d = new Node("D", x, y);
        Node b = new Node("B", d, null);
        Node e = new Node("E", null, null);
        Node f = new Node("F", null, null);
        Node c = new Node("C", e, f);
        Node a = new Node("A", b, c);
        root = a;
    }
    // 根节点
    private Node root;
    private List < Node > result = new ArrayList < Node > ();
    // 前序遍历方法 【根左右】
    public void preOrder(Node node)
    {
        result.add(node);
        if (node.getlChild() != null)
        {
            preOrder(node.getlChild());
        }
        if (node.getrChild() != null)
        {
            preOrder(node.getrChild());
        }
    }
    // 中序遍历法【左根右】
    public void inOrder(Node node)
    {
        if (node.getlChild() != null)
        {
            inOrder(node.getlChild());
        }
        result.add(node);
        if (node.getrChild() != null)
        {
            inOrder(node.getrChild());
        }
    }
    // 后序遍历法【左右根】
    public void postOrder(Node node)
    {
        if (node.getlChild() != null)
        {
            postOrder(node.getlChild());
        }
        if (node.getrChild() != null)
        {
            postOrder(node.getrChild());
        }
        result.add(node);
    }
    // 计算深度
    public int caclDepth(Node node)
    {
        if (node.getlChild() == null && node.getrChild() == null)
        {
            return 1;
        }
        int leftDepth = 0;
        int rightDepth = 0;
        if (node.getlChild() != null)
        {
            leftDepth = caclDepth(node.getlChild());
        }
        if (node.getrChild() != null)
        {
            rightDepth = caclDepth(node.getrChild());
        }
        return leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
    }
    public static void main(String[] args)
    {
        Tree tree = new Tree();
        System.out.println("根节点:" + tree.getRoot()
            .getDate());
        // 先序排列
        tree.preOrder(tree.getRoot());
        System.out.println("树的深度是:" + tree.caclDepth(tree.getRoot()));
        System.out.println("先序排列后结果:");
        for (Node node: tree.getResult())
        {
            System.out.print(node.getDate() + "-->");
        }
        // 中序排列
        System.out.println();
        Tree tree2 = new Tree();
        tree2.inOrder(tree2.getRoot());
        System.out.println("中序排列后结果:");
        for (Node node: tree2.getResult())
        {
            System.out.print(node.getDate() + "-->");
        }
        // 后序排列
        System.out.println();
        Tree tree3 = new Tree();
        tree3.postOrder(tree3.getRoot());
        System.out.println("后序排列后结果:");
        for (Node node: tree3.getResult())
        {
            System.out.print(node.getDate() + "-->");
        }
    }
}

node.java

package com.model;
public class Node
{
    @Override
    public String toString()
    {
        return "Node [date=" + date + ", lChild=" + lChild + ", rChild=" + rChild + "]";
    }
    public String getDate()
    {
        return date;
    }
    public void setDate(String date)
    {
        this.date = date;
    }
    public Node getlChild()
    {
        return lChild;
    }
    public void setlChild(Node lChild)
    {
        this.lChild = lChild;
    }
    public Node getrChild()
    {
        return rChild;
    }
    public void setrChild(Node rChild)
    {
        this.rChild = rChild;
    }
    public Node(String date, Node lChild, Node rChild)
    {
        super();
        this.date = date;
        this.lChild = lChild;
        this.rChild = rChild;
    }
    private String date;
    private Node lChild;
    private Node rChild;
}

手写一个二叉树的内容就为你分享到这里了,更多java程序代码例子,请多多的关注奇Q工具网来进行了解吧。

推荐阅读:

java二叉树蛇形遍历如何实现?二叉树遍历算法

非递归中序遍历二叉树java实现

java二叉树层次遍历(实例)