【算法】Java线性表转化为二叉树与二叉树打印(优化思路过程)

前言

在总结查找算法时,发现对二叉树总是看画图和文字描述,真正上手实现的机会并不太多,于是就根据自己理解实现了一下二叉树的相关操作。
限于个人水平,理论和代码可能存在缺陷,欢迎提出并讨论。

代码结构

import java.util.LinkedList;
import java.util.Queue;

public class MySeek {
   
   

	public static void main(String[] args) {
   
   
		int[] list1 = {
   
    0, 1, 2, 3 };
		int[] list2 = {
   
    6, 3, 2, 8, 5, 9, 0, 1, 7, 4 };

		tree(list1);
		tree(list2);
	}
}

树结构

	// 二叉查找树结构
	private static class TreeNode {
   
   
		private int value;
		private TreeNode left;
		private TreeNode right;

		public TreeNode() {
   
   
		}

		public TreeNode(int value) {
   
   
			this.value = value;
		}
		//省略get()、set()
	}

二叉树查找

	/*
	 * 二叉树查找 
	 * 时间复杂度:O(logn)~O(n)
	 */
	public static void tree(int[] li, int count) {
   
   
		// 构建树
		TreeNode head = new TreeNode(li[0]);
		makeTree(head, li, 1);
		
		while (head != null) {
   
   
			if (head.getValue() == count) {
   
   
				System.out.println("二叉树查找:查找成功,序列中存在" + count);
				return;
			} else if (head.getValue() > count) {
   
   
				head = head.getLeft();
			} else {
   
   
				head = head.getRight();
			}
		}
		System.out.println("二叉树查找:查找失败,序列中不存在" + count);
	}

STEP1 — 种一棵树

怎么在线性表查找不难,怎么在二叉树中查找也不难,不过给出一个线性表要转化成二叉树就需要用递归一个个放到只有根节点的树中。

顺序表转化为二叉树

	/*
	 * 将顺序表转化为二叉查找树 
	 * head 根节点 
	 * li 线性表 
	 * key 准备插入二叉树的元素位置
	 */
	public static void makeTree(TreeNode head, int[] li, int key) {
   
   
		// 递归结束条件
		if (key >= li.length) {
   
   
			return;
		}

		// 复制头结点向下遍历
		TreeNode node = head;

		// 准备插入的子结点
		TreeNode newNode = new TreeNode(li[key]);

		while (node != null) {
   
   
			if (node.value > newNode.value) {
   
   
				// 左子树
				
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值