二叉树学习--幸好只有二叉

学习总结-来自《极客时间-数据结构与算法》

概念

每个数据节点最多只有两个相关子节点。
二叉树的几个因素

  • 高度:该节点到叶子节点经历的最长边数(从下到上)
  • 深度:根节点到该节点所经历的边数(从上到下)
  • 层数:节点的深度+1
  • 树的高度=根的高度
  • 在这里插入图片描述

类型

  • 满二叉树:每个节点正好都有两个子节点在这里插入图片描述
  • 完全二叉树:除了最后一层,其他层的节点个数都要达到最大。并且最后一层的子节点都靠左
    在这里插入图片描述
  • 二叉查找树
    在普通二叉树的结构上,满足一下数据存储的要求:
    在树中的任意一个节点位置,其左子树每个节点的值都要小于该节点。其右子树每个节点的值都要大于该节点

实现方式

树的实现方法有两种(1)链表(2)数组

  • 链表:每个链表节点有data,还有两个代表左右节点
    在这里插入图片描述
  • 数组:

在这里插入图片描述

遍历方式

在这里插入图片描述

  • 前序遍历代码
//前序遍历:本身,左,右
	public static void preOrder(BinaryTreeNode node) {
		if(node == null) {
			return;
		}
		System.out.print(node.data+",");
		preOrder(node.left);
		preOrder(node.right);
	}
  • 中序遍历代码
//中序遍历:左,本身,右
	public static void MiddleOrder(BinaryTreeNode node) {
		if(node == null) {
			return ;
		}
		MiddleOrder(node.left);
		System.out.print(node.data+",");
		MiddleOrder(node.right);
		
	}
  • 后序遍历代码
//后序遍历:右,左,本身
	public static void AfterOrder(BinaryTreeNode node) {
		if(node == null) {
			return ;
		}
		AfterOrder(node.right);
		AfterOrder(node.left);
		System.out.print(node.data+",");

	}
  • 按层遍历代码
//按层遍历
	public static void levelOrder(BinaryTreeNode node) {
		if(node == null) {
			return;
		}
		
		LinkedList<BinaryTreeNode> queue = new LinkedList<BinaryTreeNode>();
		queue.offer(node);
		while(!queue.isEmpty()) {
			BinaryTreeNode treeNode = queue.pop();
			if(treeNode!=null) {
				System.out.print(treeNode.data+",");
				queue.offer(treeNode.left);
				queue.offer(treeNode.right);
			}
			
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值