当前位置:   article > 正文

力扣94题(java语言)

力扣94题(java语言)

题目 

思路

使用一个栈来模拟递归的过程,以非递归的方式完成中序遍历(使用栈可以避免递归调用的空间消耗)。

遍历顺序步骤:

  1. 遍历左子树
  2. 访问根节点
  3. 遍历右子树
  1. package algorithm_leetcode;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Stack;
  5. public class Solution_94 {
  6. public List<Integer> inorderTraversal(TreeNode root) {
  7. // 待处理节点
  8. Stack<TreeNode> stack = new Stack<>();
  9. // 结果
  10. List<Integer> output_arr = new ArrayList<>();
  11. // 如果root为空
  12. if (root == null) {
  13. // 返回空的 output_arr
  14. return output_arr;
  15. }
  16. // 初始化为根节点
  17. TreeNode current = root;
  18. // 循环 只要当前节点不为空,并且栈不为空
  19. while (current != null || !stack.isEmpty()) {
  20. // 当前节点不为空,直到左子树为空
  21. while (current != null) {
  22. // 添加到栈
  23. stack.push(current);
  24. // 当前节点移动到左子节点
  25. current = current.left;
  26. }
  27. // 弹出栈节点
  28. current = stack.pop();
  29. // 添加到结果中
  30. output_arr.add(current.val);
  31. // 如果有右子节点,就移动到右子节点
  32. current = current.right;
  33. }
  34. return output_arr;
  35. }
  36. }
  37. class TreeNode {
  38. int val;
  39. TreeNode left;
  40. TreeNode right;
  41. TreeNode() {}
  42. TreeNode(int val) { this.val = val; }
  43. TreeNode(int val, TreeNode left, TreeNode right) {
  44. this.val = val;
  45. this.left = left;
  46. this.right = right;
  47. }
  48. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/907967
推荐阅读
相关标签
  

闽ICP备14008679号