二叉树相关操作

来源:互联网 发布:pc蛋蛋计算器单双算法 编辑:程序博客网 时间:2024/04/25 06:38

在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。

二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。


二叉树的第i层至多有2^{i-1}个结点;

深度为k的二叉树至多有2^k-1个结点;

对任何一棵二叉树T,如果其终端结点数为n_0,度为2的结点数为n_2,则n_0=n_2+1。


一棵深度为k,且有2^k-1个节点称之为满二叉树;

深度为k,有n个节点的二叉树,当且仅当其每一个节点都与深度为k的满二叉树中,序号为1至n的节点对应时,称之为完全二叉树。


package sorttree;/** * Created by Leon on 2017/8/7. */class Node{    private int key;    private Object value;    public Node left;    public Node right;    private int level = 1;    public Node(){}    public Node(int key , Object value)    {        this.key = key;        this.value = value;    }    public void setKey(int key)    {        this.key = key;    }    public void setValue(Object value)    {        this.value = value;    }    public void setLevel(int level)    {        this.level = level;    }    public int getKey()    {        return key;    }    public Object getValue()    {        return value;    }    public int getLevel()    {        return level;    }    @Override    public String toString()    {        return "Node{" +                "key=" + key +                ", value=" + value +                ", level=" + level +                '}';    }}public class SortTree{    private Node root;    public SortTree(){}    public SortTree(Node root)    {        this.root = root;    }    public void insert(Node node)    {        if (this.root == null)        {            this.root = node;            return;        }        else        {            Node currentNode = root;            while(true)            {                if(node.getKey()>currentNode.getKey())                {                    if(currentNode.right == null)                    {                        currentNode.right = node;                        node.setLevel(node.getLevel()+1);                        return;                    }                    else                    {                        currentNode=currentNode.right;                        node.setLevel(node.getLevel()+1);                    }                }                else                {                    if(currentNode.left == null)                    {                        currentNode.left = node;                        node.setLevel(node.getLevel()+1);                        return;                    }                    else                    {                        currentNode = currentNode.left;                        node.setLevel(node.getLevel()+1);                    }                }            }        }    }    public void show()    {        show(this.root);    }    private void show(Node node)    {        if (node != null)        {            show(node.left);            for(int i=1;i<node.getLevel();i++)            {                System.out.print("    ");            }            System.out.println(node.getKey()+":"+node.getValue());            show(node.right);        }    }    public Node find(int key)    {        Node currentNode = root;        while(currentNode!=null)        {            if (currentNode.getKey()==key)            {                return currentNode;            }            else if (currentNode.getKey()>key)            {                currentNode=currentNode.left;            }            else if (currentNode.getKey()<key)            {                currentNode=currentNode.right;            }        }        return null;    }    public static void main(String[] args)    {        Node root = new Node(4, "A");        SortTree tree = new SortTree(root);        tree.insert(new Node(3, "B"));        tree.insert(new Node(5, "C"));        tree.insert(new Node(1, "D"));        tree.insert(new Node(0, "E"));        tree.insert(new Node(2, "F"));        tree.show();        System.out.println(tree.find(0));        System.out.println(tree.find(4));    }}


原创粉丝点击