• 二叉树--中序遍历的递归和非递归(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;
        }
    
  • 相关阅读:
    回流与重绘
    事件循环的一些小啰嗦
    async与await的那些事儿
    数组去重的方法们
    Object的一些常用方法
    JS事件流的一些理解
    关于Ajax的那些记录
    call、bind与apply函数的区别
    继承的一些细碎记载
    计算机基础的小贴士(1)
  • 原文地址:https://www.cnblogs.com/swifthao/p/13211185.html
Copyright © 2020-2023  润新知