1 关于二叉树的生成--遍历--反转-等操作的JAVA版实现
二叉树:是一种有两个子节点的树形结构,分为根节点,左子数,右子数
平衡二叉树:平衡二叉树基本定义是指树中任一结点的左、右子树高度大致相同。平衡二叉树有很多种最著名的是由前苏联数学家Adels提出的,我们也称其为称为AVL树。平衡二叉树(AVL树)定义如下:平衡二叉树或者是一棵空树,或者是具有以下性质的二叉排序树:(1)它的左子树和右子树的高度之差绝对值不超过1;(2)它的左子树和右子树都是平衡二叉树。(如图所示)
2 JAVA定义一个二叉树链表
定义结构类:public class TreeNode {
int data;//根节点数据
TreeNode left;
TreeNode right;//左右节点
public TreeNode(int data){//将左右节点重置为根节点,其左右节点为空
this.data=data;
left=null;
right=null;}
现在我们已经定义完了二叉树的结构和构造方法.包括新的二叉树生成方法.现在能够让一组数自动生成一个二叉树了.
3 定义二叉树的先序--中序---后序遍历方法
先序:先访问根结点,再访问左子树,然后再访问右子树
中序:先访问左子树,再访问,然后再访问右子树
后序:先访问左子树,再访问右子树,然后再访问根结点
这里我们用递归方法实现,原理很简单,就不赘述了.
4 生成镜像二叉树,也就是实现二叉树的反转.左子树变为右子树,右子数变为左子树
(原理如图,图片来自互联网)
使用递归法进行反转10多行就解决了,使用遍历法也不难.其实两种算法的实现核心都是一样的,都是轮询进行左右子树交换,只是实现的路径不同.代码看图.
5 主函数进行二叉树生成---遍历---反转---再遍历的操作
代码
运行结果
6二叉树变成平衡二叉树,(链表反转,双向链表反转等),源码在github上
地址:https://github.com/yanshilong1/Mylgorithm
谢谢阅读.
网友评论