链式二叉树的实现(Java)
定义树节点:
package 链式二叉树;
public class TreeNode {
private Object data;
private TreeNode left;
private TreeNode right;
public TreeNode() {
this.data = null;
this.left = null;
this.right = null;
}
public TreeNode(Object data, TreeNode left, TreeNode right) {
this.data = data;
this.left = left;
this.right = right;
}
public Object getData() {
return this.data;
}
public void setData(Object data) {
this.data = data;
}
public TreeNode getLeft() {
return this.left;
}
public void setLeft(TreeNode left) {
this.left = left;
}
public TreeNode getRight() {
return this.right;
}
public void setRight(TreeNode right) {
this.right = right;
}
}
二叉树实现:
package 链式二叉树;
public class BinaryTree {
public TreeNode root;
public BinaryTree(TreeNode root) {
this.root = root;
}
public BinaryTree() {
this.root = null;
}
public TreeNode getRoot() {
return this.root;
}
public void setRoot(TreeNode root) {
this.root = root;
}
//前序遍历
public void preorder(TreeNode root) {
if(root != null) {
System.out.println(root.getData());
preorder(root.getLeft());
preorder(root.getRight());
}
}
//中序遍历
public void middleorder(TreeNode root) {
if(root != null) {
middleorder(root.getLeft());
System.out.println(root.getData());
middleorder(root.getRight());
}
}
//后序遍历
public void postorder(TreeNode root) {
if(root != null) {
postorder(root.getLeft());
postorder(root.getRight());
System.out.println(root.getData());
}
}
//获得父节点
public TreeNode getParent(TreeNode ele) {
return (root == null || ele == ele) ? null : parent(root, ele);
}
private TreeNode parent(TreeNode root, TreeNode e) {
if(root == null) return null;
if(root.getLeft() == e || root.getRight() == e) return root;
TreeNode t;
return ((t = parent(root.getLeft(), e)) != null) ? t : parent(root.getRight(), e);
}
//获得节点个数
public int getSize() {
return length(root);
}
private int length(TreeNode root) {
return root == null ? 0 : (length(root.getLeft()) + length(root.getRight()) + 1);
}
//获得树的深度
public int getDepth() {
return depth(root);
}
private int depth(TreeNode root) {
if(root == null) return 0;
int m = depth(root.getLeft());
int n = depth(root.getRight());
return m > n ? m+1 : n+1;
}
public static void main(String[] args) {
TreeNode l12 = new TreeNode("left12", null, null);
TreeNode r12 = new TreeNode("right12", null, null);
TreeNode l22 = new TreeNode("left22", null, null);
TreeNode r22 = new TreeNode("right22", null, null);
TreeNode l1 = new TreeNode("left1", l12, r12);// 根节点左子树
TreeNode r1 = new TreeNode("right1", l22, r22);// 根节点右子树
TreeNode root = new TreeNode("root", l1, r1);// 创建根节点
BinaryTree bt = new BinaryTree(root);
// System.out.println("=======先序遍历======");
// bt.preorder(bt.getRoot());
// System.out.println("=======中序遍历======");
// bt.middleorder(bt.getRoot());
System.out.println("深度:"+ bt.getDepth());
}
}
链式二叉树的实现(Java)的更多相关文章
- UVa 122 Trees on the level(链式二叉树的建立和层次遍历)
题目链接: https://cn.vjudge.net/problem/UVA-122 /* 问题 给出每个节点的权值和路线,输出该二叉树的层次遍历序列. 解题思路 根据输入构建链式二叉树,再用广度优 ...
- (三)使用链式数据实现包(java)
目标: 1) 描述数据的链式组织方式 2) 描述如何在链式节点链的开头添加新节点 3) 描述如何删除链式节点链的首节点 4) 描述如何在链式节点链中找到某个数据 5) 使用链式节点链实现ADT包 6) ...
- C_数据结构_链式二叉树
# include <stdio.h> # include <malloc.h> struct BTNode { int data; struct BTNode * pLchi ...
- C语言实现链式二叉树静态创建,(先序遍历),(中序遍历),(后续遍历)
#include <stdio.h>#include <stdlib.h> struct BTNode{ char data ; struct BTNode * pLchild ...
- C#数据结构-二叉树-链式存储结构
对比上一篇文章"顺序存储二叉树",链式存储二叉树的优点是节省空间. 二叉树的性质: 1.在二叉树的第i层上至多有2i-1个节点(i>=1). 2.深度为k的二叉树至多有2k- ...
- [数据结构 - 第6章] 树之链式二叉树(C语言实现)
一.什么是二叉树? 1.1 定义 二叉树,是度为二的树,二叉树的每一个节点最多只有二个子节点,且两个子节点有序. 1.2 二叉树的重要特性 (1)二叉树的第 i 层上节点数最多为 2n-1: (2)高 ...
- Java实现链式存储的二叉树
二叉树的定义: 二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的.分别称作这个根的左子树和右子树的二叉树组成. 二叉树的遍历方式主要 ...
- Java实现链式存储的二叉查找树(递归方法)
二叉查找树的定义: 二叉查找树或者是一颗空树,或者是一颗具有以下特性的非空二叉树: 1. 若左子树非空,则左子树上所有节点关键字值均小于根节点的关键字: 2. 若右子树非空,则右子树上所有节点关键字值 ...
- 【Java】子类的链式调用
记录最近在项目设计中遇到的一个小问题. 前提:有这样两个POJO类,它们都可以通过链式调用的方式来设置其属性值,其中一个类继承了另一个类. 问题:通过链式调用,子类对象访问父类方法后,如何使返回对象仍 ...
随机推荐
- 用jquery实现html5的placeholder功能
html5的placeholder功能在表单中经常用到,它主要用来提示用户输入信息,当用户点击该输入框之后,提示文字会自动消失. 我们用jquery实现类似的功能: 当输入框获得焦点时,清空输入框中的 ...
- jquey下eq()的使用注意事项
写在开始的话: 今天在公司路经同事工位,发现在写jquery代码,刚好遇见一个bug,于是驻足看了一会,发现了jq遍历方法中eq()的使用的一个容易犯错的地方. 同事的代码大概意思是这样的: < ...
- chrome扩展安装图文教程
众所周知chrome的各类插件,扩展很丰富,也有很多经典的应用.但是谷歌经常被墙,无法访问,想要通过访问谷歌的应用市场来直接安装浏览器扩展会比较让人抓狂,好不容易无数次刷新后打开了页面,找到了想要的应 ...
- jquery对象的遍历$(selector).each()
<!DOCTYPE html> <html> <head> <script language="javascript" src=" ...
- labview使用场景
测试测量:LABVIEW [6] 最初就是为测试测量而设计的,因而测试测量也就是现在LABVIEW最广泛的应用领域.经过多年的发展,LABVIEW在测试测量领域获得了广泛的承认.至今,大多数主流的测 ...
- MyBatis 实用篇(二)配置文件
MyBatis 实用篇(二)配置文件 一.全局配置 全局配置:http://www.mybatis.org/mybatis-3/zh/configuration.html <?xml versi ...
- Redis 安装配制
Redis 安装配制 redis 安装分为单机安装.伪集群安装.集群安装. Redis 下载地址:http://www.redis.cn/download.html Redis 在线测试工具:http ...
- C# HttpClient 请求转发
最近在做一个项目,需要用到别人的接口,但是遇到一个问题,这个接口只能在服务器上访问,不支持外网访问,这让人有点头疼,本地开发没有对应的环境,不好调试,写好代码封装好发布到服务器,在进行前期测试太麻烦了 ...
- swift学习之UITabelView ----使用xib定义cell
// // TwoViewController.swift // tab // // Created by su on 15/12/7. // Copyright © 2015年 tian. ...
- 一个hql语句
在hql语句里面,in的使用方法比较特别. from DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' ) in后面是一个list,我写的 ...