Given a binary tree, return the inorder traversal of its nodes‘ values.
For example:
Given binary tree [1,null,2,3]
,
1 2 / 3
return [1,3,2]
.
Note: Recursive solution is trivial, could you do it iteratively?
题目链接:https://leetcode.com/problems/binary-tree-inorder-traversal/
题目分析:中序遍历二叉树,递归的方法简单明了,不多说了
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { void DFS(TreeNode root, List<Integer> ans) { if(root == null) { return; } DFS(root.left, ans); ans.add(root.val); DFS(root.right, ans); } public List<Integer> inorderTraversal(TreeNode root) { List<Integer> ans = new ArrayList<>(); DFS(root, ans); return ans; } }
下面是非递归的做法,用一个栈模拟递归的过程,中序遍历的顺序是 左->中->右,先一直走到最左端,取值后pop,这个过程其实完成了左->中的遍历,每次pop后再往右走,这样就完成了左->中->右的遍历
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> ans = new ArrayList<>(); Stack<TreeNode> stack = new Stack<>(); while(root != null || !stack.empty()) { while(root != null) { stack.push(root); root = root.left; } if(!stack.empty()) { root = stack.peek(); stack.pop(); ans.add(root.val); root = root.right; } } return ans; } }
时间: 2024-10-21 04:49:27