二叉树的非递归后序遍历

小灰灰 2022-05-23 02:59 261阅读 0赞

70

  1. import java.util.*;
  2. class TreeNode {
  3. int val;
  4. TreeNode left;
  5. TreeNode right;
  6. TreeNode(int x) { val = x; }
  7. }
  8. public class Solution {
  9. //解法一:双栈实现二叉树的非递归后序遍历
  10. public ArrayList<Integer> postorderTraversal(TreeNode root) {
  11. ArrayList<Integer> list=new ArrayList<>();
  12. if(root==null)
  13. return list;
  14. Stack<TreeNode>stack=new Stack<>();//存储节点
  15. Stack<TreeNode>temp=new Stack<>();//存储节点
  16. TreeNode node=root;
  17. while(node!=null||stack.size()>0){
  18. //把当前节点及其右侧节点压入栈
  19. while(node!=null){
  20. stack.push(node);
  21. temp.push(node);
  22. node=node.right;
  23. }
  24. //处理栈顶的左侧节点
  25. if(stack.size()>0){
  26. node=stack.pop();
  27. node=node.left;
  28. }
  29. }
  30. while(!temp.isEmpty()){
  31. list.add(temp.pop().val);
  32. }
  33. return list;
  34. }
  35. //方法二:单栈遍历法
  36. public ArrayList<Integer> postorderTraversal2(TreeNode root) {
  37. ArrayList<Integer> list=new ArrayList<>();
  38. if(root==null)
  39. return list;
  40. Stack<TreeNode>stack=new Stack<>();//存储节点
  41. stack.push(root);
  42. while(!stack.isEmpty()){
  43. TreeNode node=stack.pop();
  44. list.add(0,node.val); //每次在队列的头部加入节点
  45. if(node.left!=null)
  46. stack.push(node.left);
  47. if(node.right!=null)
  48. stack.push(node.right);
  49. }
  50. return list;
  51. }
  52. public static void main(String[]args){ //System.out.println("Hello World!"); } }

发表评论

表情:
评论列表 (有 0 条评论,261人围观)

还没有评论,来说两句吧...

相关阅读