美文网首页
二叉树-前中后序遍历

二叉树-前中后序遍历

作者: 今年花开正美 | 来源:发表于2020-06-01 23:01 被阅读0次

今天开始学习树,先从简单的二叉树遍历开始吧。

题目介绍

给定一个二叉树,分别用前序遍历、中序遍历、后序遍历来获取对应节点的值并输出结果。树的结构如下图所示:


二叉树遍历题目.png

先对前中后序遍历知识做个简单介绍:

  • 前序遍历,先读取父节点值,然后读取左子树节点值,最后读取右子树节点值。比如上图的结果应为:F->B->A->D->C->E->G->I->H
  • 中序遍历,先读取左子树节点值、然后读取父节点值,最后读取右子树节点值。
    比如上图的结果应为:A->B->C->D->E->F->G->H->I
  • 后序遍历,先读取左子树节点值,然后读取右子树节点值,最后读取父节点值。
    比如上图的结果应为:A->C->E->D->B->F->H->I->G

实现思路

今天就不上图了,主要说下我的实现主要是基于递归的方式来实现的。而递归代码最重要的是两点:
1、找到递归公式
2、找到终止条件

遍历树的终止条件比较好找,只要是递归到叶子节点就终止递归,然后层层返回。

而递归公式我们可以稍微思考以下,我们定义递归函数为F,节点值几位V,父节点结果P,左子节点记为left,右子节点记为rigth,则可以得到以下公式:
1、前序遍历:F(P) = P.V + F(P.left) + F(P.rigth);
2、前序遍历:F(P) = F(P.left) + P.V + F(P.rigth);
3、前序遍历:F(P) = F(P.left) + F(P.rigth) + P.V;

公式出来后,我们就只要找着公式来实现就好了。

实现代码

public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode() {
    }

    TreeNode(int val, TreeNode left, TreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}
public class SolutionPreorderTraversal {
    List<Integer> orderList = new ArrayList<>();

    public List<Integer> postorderTraversal(TreeNode root) {
        if (null != root) {
            postorderTraversal(root.left);
            postorderTraversal(root.right);
            orderList.add(root.val);
        }
        return orderList;
    }

    public List<Integer> inorderTraversal(TreeNode root) {
        if (null != root) {
            inorderTraversal(root.left);
            orderList.add(root.val);
            inorderTraversal(root.right);
        }
        return orderList;
    }

    public List<Integer> preorderTraversal(TreeNode root) {
        if (null != root) {
            orderList.add(root.val);
            preorderTraversal(root.left);
            preorderTraversal(root.right);
        }
        return orderList;
    }
}

今天内容还是比较简单的,我们后面再慢慢的深入学习吧。/奸笑

相关文章

  • 二叉树的遍历方式

    二叉树的遍历方式有多种,前序遍历,中序遍历,后序遍历,层序遍历,在这里来介绍一下前、中、后序遍历。 前序遍历:根左...

  • 2018-09-07

    二叉树的前中后序遍历 二叉树由左子树、右子树和根组成(L, R,D) 前,中,后序遍历是针对根节点来说的。DLR ...

  • leetcode 144 145 94

    二叉树遍历 前序遍历 中序遍历 后序遍历

  • 递归调用中的递归序

    从刚开始接触递归,到接触二叉树递归遍历,简单几行代码就能实现前中后序遍历,而且,前中后序遍历的代码基本一致,觉得好...

  • goLang 二叉树遍历(递归 非递归 前序遍历 中序遍历 后序

    goLang 二叉树遍历(递归 非递归 前序遍历 中序遍历 后序遍历 层序遍历) 前序遍历 中序遍历 后序遍历 代...

  • 二叉树的遍历与创建

    二叉树的遍历 分为:前序,中序,后序,层序。 前/中/后序,是根据跟节点遍历的前后顺序来定义的。 前序遍历 从根节...

  • 二叉树的各种遍历方法

    二叉树的常用遍历方法 二叉树常用的遍历方法包括: 前序遍历 中序遍历 后序遍历 层次遍历 而前三种遍历的具体实现上...

  • 二叉树的一些基本知识总结

    学了学二叉树,这里说说怎样遍历二叉树.四种方式:前序遍历,中序遍历,后序遍历,层次遍历. 主要说说递归的遍历方法前...

  • POJ 2255 Tree Recovery(根据前中序遍历,重

    题意:给出二叉树的前序遍历和中序遍历,求后序遍历。 NO.1:无需重建二叉树,可直接求出后序遍历结果。 NO.2 ...

  • leecode刷题(30)-- 二叉树的后序遍历

    leecode刷题(30)-- 二叉树的后序遍历 二叉树的后序遍历 给定一个二叉树,返回它的 后序 遍历。 示例:...

网友评论

      本文标题:二叉树-前中后序遍历

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