我是靠谱客的博主 震动长颈鹿,最近开发中收集的这篇文章主要介绍数据结构与算法:二叉树遍历二叉树遍历发散,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

好久没敲代码,想来还是回过头看看基础点的回归感觉。

二叉树是个基础数据结构,很难说直接在某个真实业务场景直接应用,很多基础数据结构都不可能直接搬到实际业务场景中使用,基础数据结构与其思想都是中级或高级数据结构的基础和构造过程,如同氢、氧元素构造成水,才直接提供给生物饮用。

文章目录

  • 二叉树遍历
  • 发散

二叉树遍历

遍历的实际内容与代码实现如下。思想很简单,除了口诀式的记住遍历方案,还需主动去理解抽象过程,最重要的还是应用场景。

package com.mym.tree;

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

/**
 * 二叉树的遍历
 * 深度遍历:
 *      前序遍历(根左右)
 *      中序遍历(左根右)
 *      后序遍历(左右根)
 *
 * 广度遍历:
 *      层序遍历
 */
public class BinaryTree {

    /**
     * 二叉树节点定义
     */
    private static class TreeNode{
        int data;
        TreeNode leftChild;
        TreeNode rightChild;

        public TreeNode(int data) {
            this.data = data;
        }
    }

    /**
     * 从集合构建二叉树
     * @param list 集合
     * @return tree
     */
    public static TreeNode createBinaryTree(LinkedList<Integer> list){
        TreeNode node = null;
        if ((list == null || list.isEmpty())) {
            return null;
        }

        Integer data = list.removeFirst();
        if (data != null) {
            node = new TreeNode(data);
            node.leftChild = createBinaryTree(list);
            node.rightChild = createBinaryTree(list);
        }
        return node;
    }

    /**
     * 前序遍历
     * @param node tree
     */
    public static void preOrderTraveral(TreeNode node){
        if (node == null) {
            return;
        }
        System.out.print(node.data);
        preOrderTraveral(node.leftChild);
        preOrderTraveral(node.rightChild);
    }

    /**
     * 中序遍历
     * @param node tree
     */
    public static void mediumOrderTraveral(TreeNode node){
        if (node == null) {
            return;
        }
        mediumOrderTraveral(node.leftChild);
        System.out.print(node.data);
        mediumOrderTraveral(node.rightChild);
    }

    /**
     * 后序遍历
     * @param node tree
     */
    public static void postOrderTraveral(TreeNode node){
        if (node == null) {
            return;
        }
        postOrderTraveral(node.leftChild);
        postOrderTraveral(node.rightChild);
        System.out.print(node.data);
    }

    /**
     * 层序遍历
     * @param node tree
     */
    public static void levelOrderTraveral(TreeNode node){
        if (node == null) {
            return;
        }
        // 使用队列(先进先出)辅助遍历。递归处理麻烦
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.offer(node);
        while (!queue.isEmpty()) {
            TreeNode poll = queue.poll();
            System.out.print(poll.data);
            if (poll.leftChild != null) {
                queue.offer(poll.leftChild);
            }
            if (poll.rightChild != null) {
                queue.offer(poll.rightChild);
            }
        }
    }

    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<Integer>(Arrays.asList(new Integer[]{3,2,9,null,null,10,null,null,8,null,4}));
        TreeNode binaryTree = createBinaryTree(list);
        System.out.println("前序遍历: ");
        preOrderTraveral(binaryTree);
        System.out.println("中序遍历: ");
        mediumOrderTraveral(binaryTree);
        System.out.println("后序遍历: ");
        postOrderTraveral(binaryTree);
        System.out.println("层序遍历: ");
        levelOrderTraveral(binaryTree);
    }
}

发散

  • 遍历,就是为了一一“检查”元素,那么很容易想到应用场景就是:查找。故而,二叉树在查找、搜索领域衍生触很多高级数据结构,并且广泛使用。如AVL、红黑数、B+、B-等等等
  • 遍历的方案有很多,如果是做学者去研究或者去发散思维,那Ok,尽情的去研究吧。若目的纯正,就是为了快速优质的实现,那大可参照如上方案。自然界多彩多样,也正因为如此人才那么多难以抉择的选择面临,有些不必要的选择,直接无视,多简单。

最后

以上就是震动长颈鹿为你收集整理的数据结构与算法:二叉树遍历二叉树遍历发散的全部内容,希望文章能够帮你解决数据结构与算法:二叉树遍历二叉树遍历发散所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部