数据结构-树-递归遍历(Java语言)

详细的代码可见github:

https://github.com/AbitGo/myClassWork/tree/master/workspace_ds

使用递归遍历树中,主要存在前序、中序、后序历遍,分别为DLR、LDR、LRD。

//递归先序历遍
    public void preRootTraverse(BiTreeNode t) {
        //DLR
        if (t != null) {
            System.out.print(t.data);
            preRootTraverse(t.lchild);
            preRootTraverse(t.rchild);
        }
    }

    //递归中序历遍
    public void inRootTraverse(BiTreeNode t) {
        //LDR
        if (t != null) {
            inRootTraverse(t.lchild);
            System.out.print(t.data);
            inRootTraverse(t.rchild);
        }
    }

    //递归中序历遍
    public void postRootTraverse(BiTreeNode t) {
        //LRD
        if (t != null) {
            postRootTraverse(t.lchild);
            postRootTraverse(t.rchild);
            System.out.print(t.data);
        }
    }

测试类:

package com.company.ch5;

public class DebugBiTree {

    public static BiTree createBiTree(){
        BiTreeNode d = new BiTreeNode("D");
        BiTreeNode g = new BiTreeNode("G");
        BiTreeNode h = new BiTreeNode("H");
        BiTreeNode e = new BiTreeNode("E",g,null);
        BiTreeNode b = new BiTreeNode("B",d,e);
        BiTreeNode f = new BiTreeNode("F",null,h);
        BiTreeNode c = new BiTreeNode("C",f,null);
        BiTreeNode a = new BiTreeNode("A",b,c);
        return new BiTree(a);

    }

    public static void main(String[] args) throws Exception {
        BiTree biTreeTest = createBiTree();

        System.out.println("递归先根遍历:");
        BiTreeNode root = biTreeTest.getRoot();
        biTreeTest.preRootTraverse(root);
        System.out.println();
        System.out.println("-------------");

        System.out.println("递归中根遍历:");
        biTreeTest.inRootTraverse(root);
        System.out.println();
        System.out.println("-------------");

        System.out.println("递归后根遍历:");
        biTreeTest.postRootTraverse(root);
        System.out.println();
        System.out.println("-------------");

        System.out.println("非递归先根遍历:");
        biTreeTest.preRootTraverse();
        System.out.println();
        System.out.println("-------------");

        System.out.println("非递归中根遍历:");
        biTreeTest.inRootTraverse();
        System.out.println();
        System.out.println("-------------");

        System.out.println("层次历遍操作实现的非递归算法:");
        biTreeTest.levelTraverse();
        System.out.println();
        System.out.println("-------------");

        System.out.println("对树进行查询:");
        BiTreeNode result =  biTreeTest.searchNode(biTreeTest.getRoot(),"B");
        if(result!=null)
            System.out.println(result.data);
        else
            System.out.println();
        System.out.println();
        System.out.println("-------------");

        System.out.println("对树节点个数进行查询:");
        int count = biTreeTest.countNode1(biTreeTest.getRoot());
        System.out.println("count:"+count);
        System.out.println();
        System.out.println("-------------");

        System.out.println("对树节点个数进行查询2:");
        count = biTreeTest.countNode2(biTreeTest.getRoot());
        System.out.println("count:"+count);
        System.out.println();
        System.out.println("-------------");

        System.out.println("对树节点个数进行查询3:");
        count = biTreeTest.countNode3(biTreeTest.getRoot());
        System.out.println("count:"+count);
        System.out.println();
        System.out.println("-------------");

        System.out.println("对树深度查询1<递归>为:");
        count = biTreeTest.getDepth1(biTreeTest.getRoot());
        System.out.println("count:"+count);
        System.out.println();
        System.out.println("-------------");

        System.out.println("对树深度查询2<非递归>为:");
        count = biTreeTest.getDepth2(biTreeTest.getRoot());
        System.out.println("count:"+count);
        System.out.println();
        System.out.println("-------------");


        BiTree biTree2 = createBiTree();
        System.out.println("对两棵树进行<方法一>对比:");
        Boolean result_equals = biTreeTest.isEqual1(biTreeTest.getRoot(),biTree2.getRoot());
        if(result_equals==true){
            System.out.println("两棵树一致");
        }else {
            System.out.println("两棵树不一致");
        }
        System.out.println("-------------");

        System.out.println("对两棵树进行<方法二>对比:");
        result_equals = biTreeTest.isEqual2(biTreeTest.getRoot(),biTree2.getRoot());
        if(result_equals==true){
            System.out.println("两棵树一致");
        }else {
            System.out.println("两棵树不一致");
        }
        System.out.println("-------------");

        System.out.println("利用前序遍历以及中序遍历生成二叉树:");
        String preOrder = "ABDEGCFH";
        String inOrder = "DBGEAFHC";
        BiTree testa = new BiTree(preOrder,inOrder,0,0,preOrder.length());
        System.out.println("后根遍历");
        testa.postRootTraverse(testa.getRoot());
        System.out.println("-------------");

        System.out.println("标明空子树的先根遍历创建一颗二叉树:");
        String preOrder1 = "AB##CD###";
        BiTree testb = new BiTree(preOrder1);
        System.out.println("先根遍历");
        testa.preRootTraverse(testb.getRoot());
        System.out.println("中根遍历");
        testa.inRootTraverse(testb.getRoot());
        System.out.println("后根遍历");
        testa.postRootTraverse(testb.getRoot());
        System.out.println("-------------");

        System.out.println("完全二叉树的顺序存储结构建立其二叉链式存储结构:");
        String preOrder2 = "ABCDEFGH";

        BiTreeNode a = new BiTree().createBiTree_method(preOrder2,0);
        System.out.println("先根遍历");
        testa.preRootTraverse(a);
        System.out.println();
        System.out.println("中根遍历");
        testa.inRootTraverse(a);
        System.out.println();
        System.out.println("后根遍历");
        testa.postRootTraverse(a);
        System.out.println();
        System.out.println("-------------");

    }
}

测试结果:

递归先根遍历:
ABDEGCFH
-------------
递归中根遍历:
DBGEAFHC
-------------
递归后根遍历:
DGEBHFCA
-------------
非递归先根遍历:
ABDEGCFH
-------------
非递归中根遍历:
DBGEAFHC
-------------
层次历遍操作实现的非递归算法:
ABCDEFGH
-------------
对树进行查询:
B

-------------
对树节点个数进行查询:
count:8

-------------
对树节点个数进行查询2:
count:8

-------------
对树节点个数进行查询3:
count:8

-------------
对树深度查询1<递归>为:
count:4

-------------
对树深度查询2<非递归>为:
count:4

-------------
对两棵树进行<方法一>对比:
两棵树一致
-------------
对两棵树进行<方法二>对比:
两棵树一致
-------------
利用前序遍历以及中序遍历生成二叉树:
后根遍历
DGEBHFCA-------------
标明空子树的先根遍历创建一颗二叉树:
先根遍历
ACDB中根遍历
CDAB后根遍历
DCBA-------------
完全二叉树的顺序存储结构建立其二叉链式存储结构:
先根遍历
ABDHECFG
中根遍历
HDBEAFCG
后根遍历
HDEBFGCA
-------------

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值