数据结构 —— 二叉树的4种遍历,java代码实现

import java.util.LinkedList;
public class TreeSearch {
    //https://blog.csdn.net/xiaojin21cen/article/details/96971188
    //创建一个二叉树
    public TreeNode getTargetTree(){
        //叶子节点
        TreeNode G=new TreeNode("G");
        TreeNode D=new TreeNode("D");
        TreeNode E=new TreeNode("E",G,null);
        TreeNode B=new TreeNode("B",D,E);
        TreeNode H=new TreeNode("H");
        TreeNode I=new TreeNode("I");
        TreeNode F=new TreeNode("F",H,I);
        TreeNode C=new TreeNode("C",null,F);
        //构造根节点
        TreeNode root=new TreeNode("A",B,C);
        return root;
    }

    /**
     *前序遍历(先根接点-》左子树-》右子树)【ABDEGCFHI】
     * @param treeNode
     */
    public void preOrderVisitTreeNode(TreeNode treeNode){
        if (treeNode!=null){
            System.out.printf(treeNode.getValue());
            if (treeNode.getLeftTreeNode()!=null){
                preOrderVisitTreeNode(treeNode.getLeftTreeNode());
            }
            if (treeNode.getRightTreeNode()!=null){
                preOrderVisitTreeNode(treeNode.getRightTreeNode());
            }
        }
    }

    /**
     * 中序遍历(先左子树-》根节点-》右子树)[DBGEACHFI]
     * @param node
     */
    public void inOrderVisitTreeNode(TreeNode node){
        if (node!=null){
            if (node.leftChildren!=null){
                inOrderVisitTreeNode(node.leftChildren);
            }
            System.out.print(node.getValue());
            if (node.rightChildren!=null){
                inOrderVisitTreeNode(node.rightChildren);
            }
        }
    }

    /**
     * 后续遍历(先左子树-》右子树-》根节点) [DGEBHIFCA]
     * @param
     */
    public void postOrderVisitTreeNode(TreeNode node){
        if (node!=null){
            if (node.leftChildren!=null){
                postOrderVisitTreeNode(node.leftChildren);
            }
            if (node.rightChildren!=null){
                postOrderVisitTreeNode(node.rightChildren);
            }
            System.out.print(node.getValue());
        }

    }

    /**
     * 层次遍历 (第1层、第2层、第3层...)[ABCDEFGHI]
     */
    public void levelOrderVisitTreeNode(TreeNode node){
        if (node!=null){
            LinkedList<TreeNode> list=new LinkedList<TreeNode>();
            list.add(node);
            TreeNode currentTreeNode;
            while (!list.isEmpty()){
                currentTreeNode=list.poll();//弹出并赋值
                if (currentTreeNode!=null){
                    System.out.print(currentTreeNode.getValue());
                    if (currentTreeNode.getLeftTreeNode()!=null){
                        list.add(currentTreeNode.getLeftTreeNode());
                    }
                    if (currentTreeNode.getRightTreeNode()!=null){
                        list.add(currentTreeNode.getRightTreeNode());
                    }
                }
            }
        }
    }
    public static void main(String[] args) {
        TreeSearch treeSearch=new TreeSearch();
        TreeNode tree=treeSearch.getTargetTree();
        System.out.println("前序遍历:");
        treeSearch.preOrderVisitTreeNode(tree);
        System.out.println("\n中序遍历:");
        treeSearch.inOrderVisitTreeNode(tree);
        System.out.println("\n后序遍历:");
        treeSearch.postOrderVisitTreeNode(tree);
        System.out.println("\n层次遍历:");
        treeSearch.levelOrderVisitTreeNode(tree);
    }

     static class TreeNode{
        private String value=null;
        private TreeNode leftChildren=null;
        private TreeNode rightChildren=null;

        public TreeNode(){

        }
        public TreeNode(String value){
            this.value=value;
        }
        public TreeNode(String value,TreeNode leftChildren,TreeNode rightChildren){
            this.value=value;
            this.leftChildren=leftChildren;
            this.rightChildren=rightChildren;
        }

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

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

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

        public String getValue() {
            return value;
        }

        public TreeNode getLeftTreeNode() {
            return leftChildren;
        }

        public TreeNode getRightTreeNode() {
            return rightChildren;
        }
    }
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值