java实现二叉树的创建及遍历

来源:互联网 发布:淘宝上的主板能买吗 编辑:程序博客网 时间:2024/06/04 19:45
            java实现二叉树的创建及遍历

巩固一下二叉树基础知识

package Tree;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Queue;import java.util.Stack;/** *  * @author don * */public class BinaryTree {    private int[] array={1,2,3,4,5,6,7,8,9};    private static List<Integer> resList=new ArrayList<Integer>();    /**     * 定义树节点     * @author don     *     */    public static class TreeNode{        int val;        TreeNode leftchild;        TreeNode rightchild;        public TreeNode(int data){            this.val=data;        }    }    /**     * 创建二叉树     * @return     */    public TreeNode createBinaryTree(){        TreeNode root=null;        List<TreeNode> nodelist=new ArrayList<TreeNode>();        for(int i=0;i<array.length;i++){            nodelist.add(new TreeNode(array[i]));        }        for(int j=0;j<array.length/2-1;j++){            nodelist.get(j).leftchild=nodelist.get(2*j+1);            nodelist.get(j).rightchild=nodelist.get(2*j+2);        }        int temp=array.length/2-1;        nodelist.get(temp).leftchild=nodelist.get(2*temp+1);        nodelist.get(temp).rightchild=nodelist.get(2*temp+2);        root=nodelist.get(0);        return root;    }    /**     * 先序遍历(递归)     * @param root     * @return     */    public List<Integer> preOrderTraverse(TreeNode root){        if(root!=null){            resList.add(root.val);            System.out.print(root.val+",");            preOrderTraverse(root.leftchild);            preOrderTraverse(root.rightchild);        }        return resList;    }    /**     * 先序遍历(非递归)     * @param root     * @return     */    public List<Integer> preOrderTraverseNR(TreeNode root){        Stack<TreeNode> nodestack=new Stack<TreeNode>();        TreeNode node=root;        while(node!=null || !nodestack.isEmpty()){            while(node!=null ){                resList.add(node.val);                System.out.print(node.val+",");                nodestack.push(node);                node=node.leftchild;            }            node=nodestack.pop();            node=node.rightchild;        }        return resList;    }    /**     * 中序遍历(非递归)     * @param root     * @return     */    public List<Integer> InOrderTraverse(TreeNode root){        if(root!=null){            InOrderTraverse(root.leftchild);            resList.add(root.val);            System.out.print(root.val+",");            InOrderTraverse(root.rightchild);        }        return resList;    }    /**     * 中序遍历(非递归)     * @param root     * @return     */    public List<Integer> InOrderTraverseNR(TreeNode root){        Stack<TreeNode> nodestack=new Stack<TreeNode>();        TreeNode node=root;        while(node!=null || !nodestack.isEmpty()){            while(node!=null){                nodestack.push(node);                node=node.leftchild;            }            node=nodestack.pop();            resList.add(node.val);            System.out.print(node.val+",");            node=node.rightchild;        }        return resList;    }    /**     * 后序遍历(递归)     * @param root     * @return     */    public List<Integer> postOrderTraverse(TreeNode root){        if(root!=null){            postOrderTraverse(root.leftchild);            postOrderTraverse(root.rightchild);            resList.add(root.val);            System.out.print(root.val+",");        }        return resList;    }    /**     * 后序遍历(非递归)     * @param root     * @return     */    public List<Integer> postOrderTraverseNR(TreeNode root){        Stack<TreeNode> nodestack=new Stack<TreeNode>();        List<TreeNode> nodelist=new ArrayList<TreeNode>();        TreeNode node=root;        while(node!=null || !nodestack.isEmpty()){            while(node!=null && !nodelist.contains(node)){                nodestack.push(node);                node=node.leftchild;            }            if(!nodestack.isEmpty()){                node=nodestack.pop();                resList.add(node.val);                nodelist.add(node);                System.out.print(node.val+",");                if(!nodestack.isEmpty()){                    node=nodestack.peek();                    node=node.rightchild;                }            }        }        return resList;    }    /**     * 层序遍历     * @param root     * @return     */    public static List<Integer> levelTraverse(TreeNode root){        Queue<TreeNode> nodequeue=new LinkedList<TreeNode>();        if(root!=null)            nodequeue.offer(root);        while(root!=null ){            if(root.leftchild!=null){                nodequeue.offer(root.leftchild);            }            if(root.rightchild!=null){                nodequeue.offer(root.rightchild);            }            TreeNode temp=nodequeue.poll();            resList.add(temp.val);            System.out.print(temp.val+",");            if(!nodequeue.isEmpty())                root=nodequeue.peek();            else                root=null;        }        return resList;    }    public static void main(String[] args){        BinaryTree bt=new BinaryTree();        TreeNode root=bt.createBinaryTree();        bt.levelTraverse(root);    }}
0 0
原创粉丝点击