94. 二叉树的中序遍历

it2025-02-11  9

题目

截图自官方

代码

注意迭代法如何写 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { // 解法1:递归 // List<Integer> ans=new ArrayList(); // public List<Integer> inorderTraversal(TreeNode root) { // if(root!=null){ // inorderTraversal(root.left); // ans.add(root.val); // inorderTraversal(root.right); // } // return ans; // 解法2:迭代。用一个栈 public List<Integer> inorderTraversal(TreeNode root) { Stack<TreeNode> s=new Stack(); List<Integer> ans=new ArrayList(); // 这个判断条件很关键,当初始root的总左子树全部遍历完,从栈底把根root弹出来往总右子树遍历时,此时栈又是空的。 while(root!=null||!s.isEmpty()){ while(root!=null){ s.push(root); root=root.left; } root=s.pop(); ans.add(root.val); root=root.right; } return ans; } }

 

最新回复(0)