栈:中序遍历

本文介绍了如何利用栈来实现二叉树的中序遍历。首先通过递归方式解释了中序遍历的基本步骤,即当根节点不空时,先遍历左子树,然后将根节点值加入结果,最后遍历右子树。接着详细说明了栈结构的实现过程,包括定义栈、当遍历节点或栈不空时进行循环,将左节点入栈,弹栈记录节点值,以及访问当前节点的右节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给出一棵二叉树,返回这棵树的中序遍历

//递归,o(n)t(n)

解题思路:

1.根节点不空时,

2.左子树不空,遍历左子树

3.根节点值加入到结果中

4.右子树不空,遍历右子树

import java.util.*;
/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */
public class Solution {
    /**
     *
     * @param root TreeNode类
     * @return int整型ArrayList
     */
    public ArrayList<Integer> inorderTraversal (TreeNode root) {
        ArrayList<Integer>list=new ArrayList<>();
        helper(root,list);
        return list;
    }
    public void helper (TreeNode root,ArrayList<Integer> list){
          if(root!=null){
              if(root.left!=null){
                  helper(root.left,list);
              }
              list.add(root.val);
              if(root.right!=null){
                  helper(root.right,list);
              }
          }
   
    }
}

1.定义栈结构

2.当栈不空或者是遍历节点不为空时,循环

3.当遍历节点不空时,找到左节点,将其依次入栈,

4.弹栈(最左节点),将其节点值记录在list中

5.访问当前节点右节点

import java.util.*;
/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */
public class Solution {
    /**
     *
     * @param root TreeNode类
     * @return int整型ArrayList
     */
    public ArrayList<Integer> inorderTraversal (TreeNode root) { 
        ArrayList<Integer>list=new ArrayList<>();
        Stack<TreeNode> stack=new Stack<>();
        TreeNode cur=root;
        while(cur!=null||!stack.isEmpty()){
            while(cur!=null){
                stack.push(cur);
                cur=cur.left;
            }
            //弹出的是最左下节点
            cur=stack.pop();
            list.add(cur.val);
            cur=cur.right;
        }
        return list;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值