LeetCode 94. Binary Tree Inorder Traversal

2021-07-23 11:30:03 浏览数 (1)

1. 问题描述

Given a binary tree, return the inorder traversal of its nodes' values.

Example:

Input: [1,null,2,3] 1 2 / 3

Output: [1,3,2] Follow up: Recursive solution is trivial, could you do it iteratively?

翻译过来就是实现二叉树的中序遍历。

2. 思路

  • 使用非递归的思路
  • 定义一个栈用于存储节点
  • 若当前节点不为空,当前节点入栈,持续将左孩子入栈
  • 从栈里pop出一个节点 root,这个节点就是最左边的节点。
  • 把root节点的值放入返回的list中
  • 然后将root指向这个节点的右孩子

3. 代码

代码语言:javascript复制
/**
* Definition for a binary tree node.
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode(int x) { val = x; }
* }
*/class Solution {
   public List<Integer> inorderTraversal(TreeNode root) {
       
       List<Integer> result = new ArrayList<>();
       
       Stack<TreeNode> stack = new Stack<>();
       
       while (true) {
           
           if(root != null) {
               stack.push(root);
               root = root.left;
           } else {
               
               if (stack.isEmpty()) {
                   break;
               }
               
               root = stack.pop();
               result.add(root.val);
               root = root.right;
           }
       }
       
       return result;
       
   }
}

0 人点赞