定义树节点:

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. 单词缩写集 · word abbreviation set

    [抄题]: 一个单词的缩写根据以下的形式.下面是一些缩写的例子 a) it --> it (没有缩写) 1 b) d|o|g --> d1g 1 1 1 1---5----0----5-- ...

  2. centos6.5修改root密码

    转:https://blog.csdn.net/cui1834515/article/details/77860113

  3. Ckeditor 中粘贴图片

    我们在ckeditor 中有上传图片,但是实际使用中这种手动上传图片方式并不是很方便,而是复制或者截图粘贴图片. 这里我们实现主要是获取对应的粘贴事件. CKEDITOR.instances[&quo ...

  4. 关于Safari浏览器使用的几点总结

    声明:下载的是Safari英文版本,在Windows操作系统下使用. 一.Safari浏览器中的开发者调试工具隐藏得比较深,找了好久才找到的,方法:按一下键盘上的alt键,浏览器上方就会弹出一个开发者 ...

  5. tp5 根据经纬度计算门店距离 可排序

    $branchInfo=Db::name('Branch')->where('b_id','250')->find(); $map['p.cate_id']=array('eq',5); ...

  6. Class 'App\Http\Controllers\DB' not found and I also cannot use a new Model

    使用laravel的db插入数据 DB::table('tags')->insert( ['name'=>'test'] ); 报错Class 'App\Http\Controllers\ ...

  7. swift 自定义弹框

    // //  ViewController.swift //  animationAlert // //  Created by su on 15/12/9. //  Copyright © 2015 ...

  8. 作业 c++编写

    1.第一版本程序Prog1:+ 给定一个数组,实现数组元素求和:,具体要求:实现对一维数组(a[100])的所有元素相加运算.+ 数据准备:a)数组长度:100:b)数组数据来源:实验数据A列:1~1 ...

  9. 使用Array.prototype.indexOf()的几点注意

    对应indexOf这个方法,在日常开发中比较常见的应该是String.prototype.indexOf()方法,Array.prototype.indexOf()方法和其有很大的相似性,本文不想去描 ...

  10. python, C++, C# 计算速度简单对比

    有个简单的运算, ; ; ; i < n ; i ++) { ; j < n; j ++) { lResult += (ulong) ( i * j ); } } return lResu ...