二叉树的递归插入【Java实现】
C++中由于有指针的存在,可以让二叉树节点指针的指针作为插入函数的实参,在函数体内通过*操作实现对真实节点指针、节点左孩子指针、节点右孩子指针的改变,这样很容易使用递归将大树问题转化到小树问题。但在JAVA中,由于没有指针只有引用,如果需要递归实现二叉树的元素插入,需要对节点进行包装,同时由于递归时需要将大树问题递归到子树,包装类中的节点需要改变,但因为最后需要的是根节点,所以根节点需要备份,在递归完成后复原。下面是实现代码:
package test;
public class BiTree{
public static void main(String[] args){
BiTree b = new BiTree();
b.operate();
}
public void operate(){
int[] num = {2,3,4,1,5};
int len = num.length;
//System.out.println(len);
Tree t = new Tree();
for(int i=0; i<len; i++){
insert(t,num[i]);
}
// System.out.println(t.root.val );
// System.out.println(t.root.right.val );
// System.out.println(t.root.left.val );
traverse(t.root);
}
public void insert(Tree t, int e){
bNode temp = new bNode(e);
bNode backUp = t.root;
if(t.root == null){
t.root = temp;
}else{
if(e == t.root.val){
return;
}else if(e<t.root.val){
t.root = backUp.left;
insert(t, e);
backUp.left = t.root;
t.root = backUp;
}else{
t.root = backUp.right;
insert(t,e);
backUp.right = t.root;
t.root = backUp;
}
}
}
public void traverse(bNode t){
if(t == null){
return;
}
System.out.println(t.val);
traverse(t.left);
traverse(t.right);
}
}
class bNode{
public int val;
public bNode left;
public bNode right;
public bNode(int val){
this.val = val;
left = null;
right = null;
}
}
class Tree{
public bNode root;
public Tree(){
root = null;
}
}
二叉树的递归插入【Java实现】的更多相关文章
- 二叉树的递归实现(java)
这里演示的二叉树为3层. 递归实现,先构造出一个root节点,先判断左子节点是否为空,为空则构造左子节点,否则进入下一步判断右子节点是否为空,为空则构造右子节点. 利用层数控制迭代次数. 依次递归第二 ...
- 数据结构二叉树的递归与非递归遍历之java,javascript,php实现可编译(1)java
前一段时间,学习数据结构的各种算法,概念不难理解,只是被C++的指针给弄的犯糊涂,于是用java,web,javascript,分别去实现数据结构的各种算法. 二叉树的遍历,本分享只是以二叉树中的先序 ...
- 【LeetCode-面试算法经典-Java实现】【145-Binary Tree Postorder Traversal(二叉树非递归后序遍历)】
[145-Binary Tree Postorder Traversal(二叉树非递归后序遍历)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a bin ...
- 【LeetCode-面试算法经典-Java实现】【144-Binary Tree Preorder Traversal(二叉树非递归前序遍历)】
[144-Binary Tree Preorder Traversal(二叉树非递归前序遍历)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a bina ...
- UVa 548 (二叉树的递归遍历) Tree
题意: 给出一棵由中序遍历和后序遍历确定的点带权的二叉树.然后找出一个根节点到叶子节点权值之和最小(如果相等选叶子节点权值最小的),输出最佳方案的叶子节点的权值. 二叉树有三种递归的遍历方式: 先序遍 ...
- php实现二叉树的镜像(二叉树就是递归)
php实现二叉树的镜像(二叉树就是递归) 一.总结 二叉树就是递归 二.php实现二叉树的镜像 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / ...
- php求二叉树的深度(1、二叉树就可以递归,因为结构和子结构太相似)(2、谋而后动,算法想清楚,很好过的)
php求二叉树的深度(1.二叉树就可以递归,因为结构和子结构太相似)(2.谋而后动,算法想清楚,很好过的) 一.总结 1.二叉树就可以递归,因为结构和子结构太相似 2.谋而后动,算法想清楚,很好过的 ...
- C中二叉排序树的非递归和递归插入操作以及中序遍历代码实现【可运行】
C中二叉排序树的非递归和递归插入操作以及中序遍历代码实现[可运行] #include <stdio.h> #include <stdlib.h> typedef int Key ...
- 二叉树的递归,非递归遍历(java)
import java.util.Stack; import java.util.HashMap; public class BinTree { private char date; private ...
随机推荐
- VS Code在本地进行调试和打开本地服务器
进行本地调试 1.在扩展中搜索插件 Debugger for Chrome 进行安装.我已经进行了安装,就没有出现安装字样. 2.配置launch.json文件,根据步骤来.file就是你在浏览器中需 ...
- SpringBoot常用注解的介绍及使用 - 转载
常用注解 @springBootApplication 系统启动类注解,此注解是个组合注解,包括了:@SpringBootConfiguration,@EnableAutoConfiguration, ...
- CSUOJ 1644 超能陆战队
1644: 超能陆战队 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 6 Solved: 1[Submit][Status][Web Board] D ...
- Tomcat会话超时时怎样记录操作日志,满足安全审计要求
众所周知.在实际的Web应用程序中,会话管理一般都採用Web容器会话管理功能. 使用Tomcat做Webserver也是如此,并且从安全的角度考虑,尽量避免去更改和干预Web容器的会话管理功能. To ...
- python-excel操作之xlrd
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++操作excel文件+++++++++++++++++ ...
- python-安装xlrd xlwt 插件
最近需要对比两个表格的内容,然后修改其中的某列内容.因为工作量太大,所以想通过python来实现.上网查了相关的操作,其中牵扯到两个功能模块,xlrd xlwt.这两个功能模块分别是对excel进行读 ...
- Fragment-管理Fragment1
前面给大家稍微看了要怎么使用fragment,在上篇中,我们也初步接触到了add,replace这些fragment操作的函数,下面就再详细讲讲如何管理Fragment页面吧. 一.概述 1.Frag ...
- Lusac定理
转载大佬的模版:http://www.cnblogs.com/vongang/archive/2012/12/02/2798138.html
- 微信小程序从零开始开发步骤(八)引入框架WeUI
首先来看下WeUI的官方介绍: WeUI 是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信内网页和微信小程序量身设计,令用户的使用感知更加统一.在微信小程序的开发过程中,涉及到的前端 ...
- TOJ 2233 WTommy's Trouble
2233. WTommy's Trouble Time Limit: 2.0 Seconds Memory Limit: 65536KTotal Runs: 1499 Accepted R ...