Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 887|回复: 0

二叉树遍历中的递归运用 java实例

[复制链接]

该用户从未签到

发表于 2011-9-19 15:53:00 | 显示全部楼层 |阅读模式
递归在我们程序开发中运用很广泛,在适合的场合可以减少我们代码量,递归很普遍的运行如:如求前n项的和及其乘积、汉诺塔、二叉树的遍历。

下面是二叉树中遍历的递归运用。

下面的代码写得复杂了点,采用泛型的方式来写,呵呵,天天写j2me的代码,这里巩固一下。

import java.util.Comparator;
import java.util.Random;
public class Tree< T> {
    private T data;
    private Tree< T> left;
    private Tree< T> right;
    private Comparator< T> compator = null;
  
    public Tree(T data, Comparator< T> compator) {
        this.data = data;
        this.left = null;
        this.right = null;
        this.compator = compator;
    }
   
    /**
     * 创建二叉树,返回根结点
     *
     * @param input
     * @return
     */
    public Tree< T> createTree(T[] input) {
       Tree< T> root = null;
        Tree< T> temp = null;
        for (int i = 0; i < input.length; i++) {
            // 创建根节点
            if (root == null) {
                root = temp = new Tree< T>(input, compator);
            } else {
                // 回到根结点
                temp = root;
                // 添加节点
                while (compator.compare(temp.data, input) != 0) {
                    if (compator.compare(temp.data, input) >= 0) {
                        if (temp.left != null) {
                            temp = temp.left;
                        } else {
                            temp.left = new Tree< T>(input, compator);
                        }
                    } else {
                        if (temp.right != null) {
                            temp = temp.right;
                        } else {
                            temp.right = new Tree< T>(input, compator);
                        }
                    }
                }
            }
        }
        return root;
    }
  
    /**
     * 前序遍历
     *
     * @param tree
     */
    public void preOrder(Tree< T> tree) {
       if (tree != null) {
            System.out.print(tree.data + " ");
            preOrder(tree.left);
            preOrder(tree.right);
        }
    }
  
    /**
     * 中序遍历
     *
     * @param tree
     */
    public void midOrder(Tree< T> tree) {
        if (tree != null) {
            midOrder(tree.left);
            System.out.print(tree.data + " ");
            midOrder(tree.right);
        }
    }
  
    /**
     * 后序遍历
     *
     * @param tree
     */
    public void posOrder(Tree< T> tree) {
        if (tree != null) {
            posOrder(tree.left);
            posOrder(tree.right);
            System.out.print(tree.data + " ");
        }
    }
  
    public T findData(Tree< T> tree, T data) {
        if (tree == null) {
            System.out.println("没有找到");
            return null;
        }
        if (compator.compare(data, tree.data) == 0) {
            System.out.print("\nthe data:" + tree.data);
            return (T) data ;
        }
        if (compator.compare(data, tree.data) < 0) {
            return findData(tree.left, data);
        } else {
            return findData(tree.right, data);
        }
    }
  
    /**
     * @param args
     */
    public static void main(String[] args) {
        Comparator< Integer> compator = new Comparator< Integer>() {
            public int compare(Integer o1, Integer o2) {
                return o1.compareTo(o2);
            }
        };
        Integer[] input = new Integer[10];
        for(int i=0;i< 10;i++){
              input=i;
            //Random r = new Random();
            //try {
             //   input =r.nextInt(10);
           // } catch (Exception ex) {
            //    ex.printStackTrace();
            //}
        }
        Tree< Integer> tree= new Tree< Integer>(1, compator);
        tree = tree.createTree(input);
        System.out.print("前序遍历:");
        tree.preOrder(tree);
        System.out.print("\n中序遍历:");
        tree.midOrder(tree);
        System.out.print("\n后序遍历:");
        tree.posOrder(tree);
        int findData = 6;
        tree.findData(tree, findData);
    }
   
}

运行结果:

C:\java>javac Tree.java

C:\java>java Tree
前序遍历:0 1 2 3 4 5 6 7 8 9
中序遍历:0 1 2 3 4 5 6 7 8 9
后序遍历:9 8 7 6 5 4 3 2 1 0
the data:6
回复

使用道具 举报

该用户从未签到

发表于 2011-10-11 12:16:49 | 显示全部楼层
不错啊。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-10 18:56 , Processed in 0.548743 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表