java实现二叉树的常见操作

本文转自:红客联盟

解释:程序调用自身的编程技巧叫做递归。

程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。

递归的三个条件:

边界条件

递归前进段

递归返回段

当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

下面通过两个示例程序来说明:

使用Java代码求5的阶乘。(5的阶乘=5*4*3*2*1)

[java]

package org.wxp.recursion;

/**

* 计算5的阶乘(result = 5*4*3*2*1)

* @author Champion.Wong

*

*

*/

public class Test01 {

public static void main(String[] args) {

System.out.println(f(5));

}

public static int f(int n) {

if (1 == n)

return 1;

else

return n*(n-1);

}

}

此题中,按照递归的三个条件来分析:

(1)边界条件:阶乘,乘到最后一个数,即1的时候,返回1,程序执行到底;

(2)递归前进段:当前的参数不等于1的时候,继续调用自身;

(3)递归返回段:从最大的数开始乘,如果当前参数是5,那么就是5*4,即5*(5-1),即n*(n-1)

使用Java代码求数列:1,1,2,3,5,8......第40位的数

[java]

package org.wxp.recursion;

/**

* 求数列:1,1,2,3,5,8......第40位的数

* @author Champion.Wong

*

*/

public class Test_02_Fibonacci {

public static void main(String[] args) {

System.out.println(f(6));

}

public static int f(int n ) {

if (1== n || 2 == n)

return 1;

else

return f(n-1) + f(n-2);

}

}

此题的突破口在:从第3位数开始,本位数是前两位数的和。要计算第多少位的值,那么就需要将位数作为参数传进方法进行计算。

(1)首先,当位数为1和2时,当前返回的值应该是1;

(2)然后,当位数为3时,返回值应该=2=1+1;

当位数为4时,返回值=3=2+1;

当位数为5时,返回值=5=3+2;

当位数为6时,返回值=8=5+3;

......

(3)由(2)得知,大于等于3的情况下,当前位数(n)的数值=f(n-1)+f(n-2)

心得:有些初学者可能认为递归即是自己调用自己,那岂不是死循环了。对,如果递归写的不合理,那就是死循环了。但是如果写的合理,加上“边界条件”,程序执行到底的时候,会逐层返回。就像我们爬山一样,我们绕着山路爬上一层又一层,如果没有山顶,我们会一直往上爬。但如果到了山顶,就按照上山时候的步骤一层一层的往下爬。

java实现二叉树的常见操作,布布扣,bubuko.com

时间: 2024-08-05 10:51:40

java实现二叉树的常见操作的相关文章

java实现二叉树的相关操作

import java.util.ArrayDeque; import java.util.Queue; public class CreateTree { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Node root=new Node(); root.data=9; Node temp01=new Node(); temp01.data=1;

java String类-字符串常见操作

/* String常见的操作: String str="abchgthujidfg"; 1,获取 1.1字符串包含的字符数,即字符串的长度. int lenrth(): str.length();   //注意字符串获取长度的方法区别于数组获取长度的方法.数组采用格式:arr.length 1.2根据位置获取位置上的字符. char charAt(int index): str.charAt(4); 1.3根据字符获取该字符的位置. int indexOf(int ch): str.i

二叉树的常见操作

[输出二叉树中的叶子结点] 无论前序.中序.后序遍历,叶子结点的输出顺序都是一样的吗?都是一样的,输出顺序为:从树的左边到右边叶子!!在二叉树的遍历算法中增加检测结点的“左右子树是否都为空”. 1 void PreOrderPrintLeaves(BinTree Bt) 2 { 3 if(Bt) 4 { 5 if(Bt->Left == NULL && Bt->Right == NULL) 6 printf("%c ", Bt->Data); 7 Pr

【Java学习】Java中字符串的常见操作

字符串中包含的字符数,也就是字符串的长度 int length();获取长度 根据位置获取位置上的某个字符 char charAt(int index); 根据字符获取该字符在字符串中位置 int indexOf(int ch) 返回的是ch在字符串中的第一次出现的位置.int indexOf(int ch,int fromIndex) 从fromIndex指定位置开始,获取ch在字符串中出现的位置.int indexOf(String str)返回的是str在字符串中的第一次出现的位置.int

读Hadoop3.2源码,深入了解java调用HDFS的常用操作和HDFS原理

本文将通过一个演示工程来快速上手java调用HDFS的常见操作.接下来以创建文件为例,通过阅读HDFS的源码,一步步展开HDFS相关原理.理论知识的说明. 说明:本文档基于最新版本Hadoop3.2.1 目录 一.java调用HDFS的常见操作 1.1.演示环境搭建 1.2.操作HDFS 1.3.java文件操作常用方法 二.深入了解HDFS写文件的流程和HDFS原理 2.1.Hadoop3.2.1 源码下载及介绍 2.2.文件系统:FileSystem 2.3.HDFS体系结构:namenod

[java学习笔记]java语言基础概述之数组的定义&常见操作(遍历、排序、查找)&二维数组

1.数组基础 1.什么是数组:           同一类型数据的集合,就是一个容器. 2.数组的好处:           可以自动为数组中的元素从零开始编号,方便操作这些数据. 3.格式:  (一旦创建,必须明确长度)          格式1:              元素类型   [ ]  数组名  =  new  元素类型  [元素个数即数组的长度]:              示例:int[] array = new int[5];          格式2:           

Java中对数组的一些常见操作

数组是一种数据结构,用来存储同一类型值的集合.通过一个整型下标可以访问数组中的每一个值. 常见操作如下: 声明数组: 数组初始化: 查看数组长度: for each循环: 数组拷贝: 数组排序: 将int数组转换为字符串: 二维数组: 1. 声明数组 语法:  数据类型[ ] 数组名: 或者   数据类型 数组名[ ]: 2.数组初始化 3.获得数组长度 4.for each循环 foreach 并不是 Java 中的关键字,是 for 语句的特殊简化版本,在遍历数组.集合时, foreach

java数据结构:单链表常见操作代码实现

一.概述: 本文主要总结单链表常见操作的实现,包括链表结点添加.删除:链表正向遍历和反向遍历.链表排序.判断链表是否有环.是否相交.获取某一结点等. 二.概念: 链表: 一种重要的数据结构,HashMap等集合的底层结构都是链表结构.链表以结点作为存储单元,这些存储单元可以是不连续的.每个结点由两部分组成:存储的数值+前序结点和后序结点的指针.即有前序结点的指针又有后序结点的指针的链表称为双向链表,只包含后续指针的链表为单链表,本文总结的均为单链表的操作. 单链表结构: Java中单链表采用No

Java集合之LinkedList常见实例操作,实例说明

一.LinkedList常见操作 package List相关; /** * LinkedList 链接列表 * LinkedList:底层使用的链表数据结构.特点:增删速度快,查询速度稍慢: */ import java.util.Iterator; import java.util.LinkedList; class linkedlist_test { public static void main(String[] args){ LinkedList linkedlist = new Li