定义树节点:

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)的更多相关文章

  1. UVa 122 Trees on the level(链式二叉树的建立和层次遍历)

    题目链接: https://cn.vjudge.net/problem/UVA-122 /* 问题 给出每个节点的权值和路线,输出该二叉树的层次遍历序列. 解题思路 根据输入构建链式二叉树,再用广度优 ...

  2. (三)使用链式数据实现包(java)

    目标: 1) 描述数据的链式组织方式 2) 描述如何在链式节点链的开头添加新节点 3) 描述如何删除链式节点链的首节点 4) 描述如何在链式节点链中找到某个数据 5) 使用链式节点链实现ADT包 6) ...

  3. C_数据结构_链式二叉树

    # include <stdio.h> # include <malloc.h> struct BTNode { int data; struct BTNode * pLchi ...

  4. C语言实现链式二叉树静态创建,(先序遍历),(中序遍历),(后续遍历)

    #include <stdio.h>#include <stdlib.h> struct BTNode{ char data ; struct BTNode * pLchild ...

  5. C#数据结构-二叉树-链式存储结构

    对比上一篇文章"顺序存储二叉树",链式存储二叉树的优点是节省空间. 二叉树的性质: 1.在二叉树的第i层上至多有2i-1个节点(i>=1). 2.深度为k的二叉树至多有2k- ...

  6. [数据结构 - 第6章] 树之链式二叉树(C语言实现)

    一.什么是二叉树? 1.1 定义 二叉树,是度为二的树,二叉树的每一个节点最多只有二个子节点,且两个子节点有序. 1.2 二叉树的重要特性 (1)二叉树的第 i 层上节点数最多为 2n-1: (2)高 ...

  7. Java实现链式存储的二叉树

    二叉树的定义: 二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的.分别称作这个根的左子树和右子树的二叉树组成. 二叉树的遍历方式主要 ...

  8. Java实现链式存储的二叉查找树(递归方法)

    二叉查找树的定义: 二叉查找树或者是一颗空树,或者是一颗具有以下特性的非空二叉树: 1. 若左子树非空,则左子树上所有节点关键字值均小于根节点的关键字: 2. 若右子树非空,则右子树上所有节点关键字值 ...

  9. 【Java】子类的链式调用

    记录最近在项目设计中遇到的一个小问题. 前提:有这样两个POJO类,它们都可以通过链式调用的方式来设置其属性值,其中一个类继承了另一个类. 问题:通过链式调用,子类对象访问父类方法后,如何使返回对象仍 ...

随机推荐

  1. Photoshop中的高斯模糊、高反差保留和Halcon中的rft频域分析研究

    在Halcon的rft变换中,我们经常可以看到这样的算子组合: rft_generic (Image, ImageFFT2, 'to_freq', 'none', 'complex', Width) ...

  2. YUI前端优化原则-cookie与图像

    四.图片.Coockie与移动应用篇 除此之外,图片和Coockie也是我们网站中几乎不可缺少组成部分,此外随着移动设备的流行,对于移动应用的优化也十分重要.这主要包括:Coockie: 减小Cook ...

  3. Android应用开发环境的搭建和使用

    主要包括Android SDK.Android开发工具:也包括如何使用Android提供的ADB.DDMS.AAPT.DX等工具,掌握这些工具是开发Android应用的基础技能. 1.Android的 ...

  4. 查找mysql的my.cnf位置

    1. which mysqld /user/local/mysql/bin/mysqld --verbose --help |grep -A 1 'Default options'

  5. Chrome Console API 参考

    https://developers.google.com/web/tools/chrome-devtools/console/command-line-reference

  6. 3ds Max从入门到精通

    1. 软件的下载与安装 这里用的是3ds Max2009简体中文版 32位 在 Win7上运行记得打上sp2补丁,不然会有bug. 2. 3ds Max的历史 3ds Max可以用在动画和游戏,点云数 ...

  7. Ubuntu下的apache2的配置过程

    参考apache2的中文文档:http://httpd.apache.org/docs/2.4/ 安装apache2: apt-get install apache2 安装apache2doc文档:a ...

  8. SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)

    首先在shiro配置类中注入rememberMe管理器 /** * cookie对象; * rememberMeCookie()方法是设置Cookie的生成模版,比如cookie的name,cooki ...

  9. Linq编译带来的诡异错误

    今天遇到一个很诡异的问题,初步猜测是Linq编译以及编译器自动优化带来的原因,对IL不是很熟悉,所以懒得去追了. 贴个代码出来,希望能抛砖引玉,得到正解. 注意到我用原始的foreach语句代替了li ...

  10. Java反射API研究(1)——注解Annotation

    注解在表面上的意思,只是标记一下这一部分,最好的注解就是代码自身.而在java上,由于注解的特殊性,可以通过反射API获取,这种特性使得注解被广泛应用于各大框架,用于配置内容,代替xml文件配置. 要 ...