zoukankan      html  css  js  c++  java
  • 二叉树--中序遍历的递归和非递归(leetcode 94

    非递归

    步骤:

    1.申请一个栈,初始时令temp为root

    2.先将temp压入stack,对以temp为头节点的子树来说,依次把左边界压入,不断令temp = temp.left

    3.不断重复步骤2,直到temp为空。此时从stack中pop出一个节点,记为新的temp,打印temp的值,并且让temp = temp.right,然后继续重复步骤2

    4.直到stack为空temp为空的时候结束过程

    代码:

        public List<Integer> inorderTraversal1(TreeNode root){
            List<Integer> list = new LinkedList<>();
            if (root == null) {
                return list;
            }
            Stack<TreeNode> stack = new Stack<> ();
            TreeNode temp = root;
            while (!stack.isEmpty() || temp != null){
                if (temp != null){
                    stack.push(temp);
                    temp = temp.left;
                }else {
                    temp = stack.pop();
                    list.add(temp.val);
                    temp = temp.right;
                }
            }
    
            return list;
        }
    

    递归

        List<Integer> list = new ArrayList<Integer> ();
    
        public List<Integer> inorderTraversal(TreeNode root) {
            if (root == null){
                return list;
            }
            inorderTraversal(root.left);
    
            list.add(root.val);
    
            inorderTraversal(root.right);
    
            return list;
        }
    
  • 相关阅读:
    R 语言中的数据结构
    minimap2 长reads比对工具
    seqtk 一款快速处理fasta/fastq 文件的小程序
    Eclipse R语言开发环境搭建 StatET插件
    Windows 安装R
    HttpClient 发送请求和参数
    Java Base64编码和解码
    docker 安装
    docker
    inotify 监控文件系统操作
  • 原文地址:https://www.cnblogs.com/swifthao/p/13211185.html
Copyright © 2011-2022 走看看