二叉树操作(Java语言)
来源:互联网 发布:网络文化节策划书 编辑:程序博客网 时间:2024/06/06 09:57
基本概念
树
除了根节点之外,每个节点只要一个父节点,根节点没有父节点。除了叶节点之外,所有节点都有一个或者多个节点,叶节点没有子节点。父节点和子节点之间用指针相连。
二叉树
所谓二叉树是树的一种特殊结构,在二叉树中每个节点最多只能拥有两个子节点。
二叉树具有以下性质:
- 非空二叉树的第n层上至多有2^(n-1)个元素。
- 深度为h的二叉树至多有2^h-1个结点。
数据结构定义
public class BTNode { int val; //值 BTNode left; //左子树 BTNode right; //右子树 public BTNode(){ } public BTNode(int val){ this.val = val; } public BTNode(int val, BTNode left, BTNode right) { this.val = val; this.left = left; this.right = right; }}
二叉树操作
遍历
遍历即将树的所有结点访问且仅访问一次。按照根节点位置的不同分为前序遍历,中序遍历,后序遍历。
- 前序遍历:先访问根结点,再访问左子结点,最后访问右子结点
- 中序遍历:先访问左子结点,再访问根结点,最后访问右子结点
- 后序遍历:先访问左子结点,再访问右子结点,最后访问根结点
如下图所示二叉树
前序遍历:10 6 4 2 8 14 12 16
中序遍历:2 4 6 8 10 12 14 16
后序遍历:2 4 8 6 12 16 14 10
代码实现
前序遍历
/** * 前序遍历 * 先访问根结点,再访问左子结点,最后访问右子结点 * @param root */ public void preorder(BTNode root){ //先访问根结点 System.out.print(root.val+" "); if(root.left!=null){ preorder(root.left); } if(root.right!=null){ preorder(root.right); } }
中序遍历
/** * 中序遍历 * 先访问左子结点,再访问根结点,最后访问右子结点 * @param root */ public void middleorder(BTNode root){ //先访问左子结点 if(root.left!=null){ middleorder(root.left); } System.out.print(root.val+" "); if(root.right!=null){ middleorder(root.right); } }
后序遍历
/** * 后序遍历 * 先访问左子结点,再访问右子结点,最后访问根结点 * @param root */ public void lastorder(BTNode root){ if(root.left!=null){ lastorder(root.left); } if(root.right!=null){ lastorder(root.right); } System.out.print(root.val+" "); }
层次遍历
/** * 层次遍历 * @param root */ public void layerorder(BTNode root){ if(root==null){ return; } //队列,先进先出 Queue<BTNode> queue = new LinkedList<>(); queue.add(root); while(!queue.isEmpty()){ BTNode node = queue.poll(); System.out.print(node.val+" "); if(node.left!=null){ queue.add(node.left); } if(node.right!=null){ queue.add(node.right); } } }
获取二叉树的高度
/** * 获取二叉树的高度 * @param root * @return */ public int getHeight(BTNode root){ if(root==null){ return 0; } int left = getHeight(root.left); int right = getHeight(root.right); int h = (left>right?left:right)+1; return h; }
获取二叉树结点的数量
/** * 获取二叉树结点的数量 * @param root * @return */ public int getCount(BTNode root){ if(root==null){ return 0; } return getCount(root.left)+getCount(root.right)+1; }
判断两棵 二叉树 是否相等
/** * 判断两棵 二叉树 是否相等 * @param root1 * @param root2 * @return */ public boolean equals(BTNode root1, BTNode root2){ if((root1==null && root2==null) ||root1.val == root2.val){ return true; } if(equals(root1.left, root2.left) && equals(root1.right, root2.right)){ return true; } return false; }
测试代码
//构造上图中的二叉树 BTNode node8 = new BTNode(2); BTNode node4 = new BTNode(4, node8, null); BTNode node5 = new BTNode(8); BTNode node2 = new BTNode(6, node4, node5); BTNode node6 = new BTNode(12); BTNode node7 = new BTNode(16); BTNode node3 = new BTNode(14, node6, node7); BTNode root = new BTNode(10, node2, node3); System.out.println("前序遍历:"); preorder(root); System.out.println("--------------"); System.out.println("中序遍历:"); middleorder(root); System.out.println("--------------"); System.out.println("后序遍历:"); lastorder(root); System.out.println("--------------"); System.out.println("层次遍历:"); layerorder(root); System.out.println("--------------"); System.out.println("结点数量:"+getCount(root)); System.out.println("--------------"); System.out.println("高度:"+getHeight(root));
0 0
- 二叉树操作(Java语言)
- 二叉树操作(java)
- java 语言实现二叉树的各种操作
- java操作二叉树
- 二叉树操作Java
- 二叉树的一些操作(C语言实现)
- 二叉树的操作 (数据结构c语言)
- 二叉树的相关操作(C语言)
- Java语言实现二叉树
- java 实现二叉树操作
- 2、二叉树--Java操作
- 二叉树的操作-java
- C语言二叉树的基本操作
- C语言二叉搜索树基本操作
- C语言二叉树遍历操作
- 二叉树C语言基本操作
- C语言:二叉树的相关操作
- 二叉树的基本操作 C语言
- Shell脚本中$、$#、$0、$1、$2、$@的介绍及demo演示
- 移动端WEB开发,click,touch,tap事件
- 如何在 GitHub 建立个人主页和项目演示页面
- 基本类型的转换
- 多线程04:《疯狂Java讲义》学习笔记——控制线程
- 二叉树操作(Java语言)
- AsyncTask 原理分析
- jsp的cookie操作
- 地址隐藏部分信息为****
- 在quartus 11.0中使用modelsim进行仿真的步骤
- openwrt SDK, 利用SDK生成自己的ipk安装包
- Java基本数据类型
- (java office转pdf) MS Office2010、WPS2015、OpenOffice4用Java将Office文档转换为PDF,WIN7 64位系统
- Android使用camera录像时保存数据到手机上