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入门到精通教程
查看: 427|回复: 0

[算法学习]二叉树遍历中的递归运用

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-11-9 00:04:29 | 显示全部楼层 |阅读模式
    递归在我们程序开发中运用很广泛,在适合的场合可以减少我们代码量,递归很普遍的运行如:如求前n项的和及其乘积、汉诺塔、二叉树的遍历。 下面是二叉树中遍历的递归运用。 下面的代码写得复杂了点,采用泛型的方式来写,呵呵,天天写j2me的代码,这里巩固一下。
    1. import java.util.Comparator;
    2. import java.util.Random;
    3. public class Tree< T> {
    4.     private T data;
    5.     private Tree< T> left;
    6.     private Tree< T> right;
    7.     private Comparator< T> compator = null;
    8.   
    9.     public Tree(T data, Comparator< T> compator) {
    10.         this.data = data;
    11.         this.left = null;
    12.         this.right = null;
    13.         this.compator = compator;
    14.     }
    15.    
    16.     /**
    17.      * 创建二叉树,返回根结点
    18.      *
    19.      * @param input
    20.      * @return
    21.      */
    22.     public Tree< T> createTree(T[] input) {
    23.        Tree< T> root = null;
    24.         Tree< T> temp = null;
    25.         for (int i = 0; i < input.length; i++) {
    26.             // 创建根节点
    27.             if (root == null) {
    28.                 root = temp = new Tree< T>(input[i], compator);
    29.             } else {
    30.                 // 回到根结点
    31.                 temp = root;
    32.                 // 添加节点
    33.                 while (compator.compare(temp.data, input[i]) != 0) {
    34.                     if (compator.compare(temp.data, input[i]) >= 0) {
    35.                         if (temp.left != null) {
    36.                             temp = temp.left;
    37.                         } else {
    38.                             temp.left = new Tree< T>(input[i], compator);
    39.                         }
    40.                     } else {
    41.                         if (temp.right != null) {
    42.                             temp = temp.right;
    43.                         } else {
    44.                             temp.right = new Tree< T>(input[i], compator);
    45.                         }
    46.                     }
    47.                 }
    48.             }
    49.         }
    50.         return root;
    51.     }
    52.   
    53.     /**
    54.      * 前序遍历
    55.      *
    56.      * @param tree
    57.      */
    58.     public void preOrder(Tree< T> tree) {
    59.        if (tree != null) {
    60.             System.out.print(tree.data + " ");
    61.             preOrder(tree.left);
    62.             preOrder(tree.right);
    63.         }
    64.     }
    65.   
    66.     /**
    67.      * 中序遍历
    68.      *
    69.      * @param tree
    70.      */
    71.     public void midOrder(Tree< T> tree) {
    72.         if (tree != null) {
    73.             midOrder(tree.left);
    74.             System.out.print(tree.data + " ");
    75.             midOrder(tree.right);
    76.         }
    77.     }
    78.   
    79.     /**
    80.      * 后序遍历
    81.      *
    82.      * @param tree
    83.      */
    84.     public void posOrder(Tree< T> tree) {
    85.         if (tree != null) {
    86.             posOrder(tree.left);
    87.             posOrder(tree.right);
    88.             System.out.print(tree.data + " ");
    89.         }
    90.     }
    91.   
    92.     public T findData(Tree< T> tree, T data) {
    93.         if (tree == null) {
    94.             System.out.println("没有找到");
    95.             return null;
    96.         }
    97.         if (compator.compare(data, tree.data) == 0) {
    98.             System.out.print("
    99. the data:" + tree.data);
    100.             return (T) data ;
    101.         }
    102.         if (compator.compare(data, tree.data) < 0) {
    103.             return findData(tree.left, data);
    104.         } else {
    105.             return findData(tree.right, data);
    106.         }
    107.     }
    108.   
    109.     /**
    110.      * @param args
    111.      */
    112.     public static void main(String[] args) {
    113.         Comparator< Integer> compator = new Comparator< Integer>() {
    114.             public int compare(Integer o1, Integer o2) {
    115.                 return o1.compareTo(o2);
    116.             }
    117.         };
    118.         Integer[] input = new Integer[10];
    119.         for(int i=0;i< 10;i++){
    120.               input[i]=i;
    121.             //Random r = new Random();
    122.             //try {
    123.              //   input[i] =r.nextInt(10);
    124.            // } catch (Exception ex) {
    125.             //    ex.printStackTrace();
    126.             //}
    127.         }
    128.         Tree< Integer> tree= new Tree< Integer>(1, compator);
    129.         tree = tree.createTree(input);
    130.         System.out.print("前序遍历:");
    131.         tree.preOrder(tree);
    132.         System.out.print("
    133. 中序遍历:");
    134.         tree.midOrder(tree);
    135.         System.out.print("
    136. 后序遍历:");
    137.         tree.posOrder(tree);
    138.         int findData = 6;
    139.         tree.findData(tree, findData);
    140.     }
    141.    
    142. }
    复制代码
    运行结果:
    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

       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/11/9/000428890.zip
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-2-25 10:00 , Processed in 0.358140 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

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