美文网首页
二叉树的基本算法

二叉树的基本算法

作者: 大聪明的博客 | 来源:发表于2022-04-08 15:19 被阅读0次

一、二叉树的递归遍历

1.先序遍历
    static class BitTree {
        int data;
        BitTree left;
        BitTree right;
    }
    static void visit(BitTree bitTree) {
     //访问节点
    }
  //使用递归方法遍历二叉树
    static void preOrder(BitTree bitTree) {
        if (bitTree != null) {
            visit(bitTree);
            preOrder(bitTree.left);
            preOrder(bitTree.right);
        }
    }
2.中序遍历
  static void midOrder(BitTree bitTree) {
        if (bitTree != null) {
            midOrder(bitTree.left);
            visit(bitTree);
            midOrder(bitTree.right);
        }
    }
3.后序遍历
    static void postOrder(BitTree bitTree) {
        if (bitTree != null) {
            postOrder(bitTree.left);
            postOrder(bitTree.right);
            visit(bitTree);
        }
    }

二、二叉树的层次遍历

二叉树的层次遍历是指二叉树从上到下,从左到右遍历数据。同一层中的节点访问完了,接着访问下一层级的元素。先遇到的节点先访问,后遇到的节点后访问,访问顺利类似队列。所以针对每一个节点的访问顺序是
1.先访问 当前节点的数据;
2.如果当前节点有左孩子,左孩子入队;
3.如果当前节点有右孩子,右孩子入队;

      static void levelOrder(BitTree bitTree){
        //这里的数组长度是情况而定,写Int最大值是随意的。
        BitTree[] queue = new BitTree[Integer.MAX_VALUE];
        int font,rear;
        if (bitTree==null)return;
        font = -1;
        rear=0;
        //根节点入队
        queue[rear] = bitTree;
        while (font!=rear){
            font++;
            //访问出队节点
            visit(queue[font]);
            //出队节点的左孩子不为null就把左孩子入队
            if (queue[font].left!=null){
                rear++;
                queue[rear] = queue[font].left;
            }
            //出队节点的右孩子不为null就把右孩子入队
            if (queue[font].right!=null){
                rear++;
                queue[rear] = queue[font].right;
            }
        }
    }

三、二叉树的非递归遍历

中序遍历的非递归算法:访问节点时先访问其左孩子,再访问该节点,最后访问右孩子。
中序遍历的时候我们先从根节点的左孩子开始,一直深入孩子节点的左孩子,直到节点的左孩子为空返回,访问该节点。

    //中序遍历的非递归算法
    static void nrInOrder(BitTree bitTree){
        //加入100的长度够用
        int maxLength =100;
        BitTree[] bitTrees = new BitTree[maxLength];
        BitTree p = bitTree;
        int top = -1;
        //根节点为null,直接return;
        if (bitTree==null)return;
        while (!(top==0 && p==null)){
            while (p!=null){
                if (top < maxLength-1)bitTrees[++top]=p;
                p = p.left;
            }
            if (top==-1)return;
            else {
                p = bitTrees[top--];
                visit(p);
                p = p.right;
            }
        }
    }

相关文章

  • 二叉树的基本算法

    二叉树的基本算法 树、二叉树 的基本概念,参考数据结构算法之美-23讲二叉树基础(上):树、二叉树[https:/...

  • Algorithm小白入门 -- 二叉树

    二叉树二叉树构造二叉树寻找重复子树 1. 二叉树 基本二叉树节点如下: 很多经典算法,比如回溯、动态规划、分治算法...

  • 二叉树遍历(递归算法和非递归算法)

    实验三 二叉树遍历(递归算法和非递归算法) 一.实验目的 1.掌握二叉树的存储结构与基本操作 2.掌握二叉树的遍历...

  • 算法基础之二叉树

    本文主要包括树相关的算法,二叉树结点基本结构如下 本文还会继续更新。 二叉树的深度 二叉树的前序遍历 二叉树的中序...

  • 关于函数递归和迭代的转化, 及尾递归相关知识的接触和思考

    javascript实现数据结构: 树和二叉树,二叉树的遍历和基本操作 js 二叉树 【数据结构与算法】深入浅出递...

  • 每日Leetcode—算法(10)

    100.相同的树 算法: 101.对称二叉树 算法: 104.二叉树的最大深度 算法: 107.二叉树的层次遍历 ...

  • 排序算法

    之前一篇练习数据结构中的二叉树-BinaryTree,本篇来点——排序算法,调调味,都是基本的排序算法中。 1. ...

  • 每日Leetcode—算法(11)

    110.平衡二叉树 算法: 111.二叉树的最小树深 算法: 112.路径总和 算法:

  • 二叉树的实现

    数据结构和算法的重要性毋庸置疑,本文将采用Java语言,来实现基本的二叉树。 实现二叉树对于二叉树本身的理解和递归...

  • 剑指offer中关于二叉树题目的总结

    关于二叉树的问题,也就是涉及二叉树的四种遍历算法以及基本的删除、插入等操作 中序遍历和前序遍历/后序遍历的结合 题...

网友评论

      本文标题:二叉树的基本算法

      本文链接:https://www.haomeiwen.com/subject/quvodrtx.html