二叉树的先、中序非递归遍历

怼烎@ 2022-05-23 03:16 270阅读 0赞

这里写图片描述

  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> preorderTraversal(TreeNode root) {
  11. ArrayList<Integer>list=new ArrayList<>();
  12. Stack<TreeNode>stack=new Stack<>();
  13. if(root==null)
  14. return list;
  15. stack.push(root);
  16. while(!stack.isEmpty()){
  17. TreeNode node=stack.pop();
  18. list.add(node.val);
  19. if(node.right!=null)
  20. {
  21. stack.push(node.right);
  22. }
  23. if(node.left!=null)
  24. {
  25. stack.push(node.left);
  26. }
  27. }
  28. return list;
  29. }
  30. //二叉树非递归中序序遍历
  31. public ArrayList<Integer> inorderTraversal(TreeNode root) {
  32. ArrayList<Integer>list=new ArrayList<>();
  33. Stack<TreeNode>stack=new Stack<>();
  34. if(root==null)
  35. return list;
  36. TreeNode node=root;
  37. while(node!=null||stack.size()>0){
  38. //把当前节点的所有左子节点压入栈
  39. while(node!=null)
  40. {
  41. stack.push(node);
  42. node=node.left;
  43. }
  44. //访问节点处理右节点
  45. while(stack.size()>0){
  46. node=stack.pop();
  47. list.add(node.val);
  48. node=node.right;
  49. }
  50. }
  51. return list;
  52. }
  53. public static void main(String[]args){
  54. // System.out.println("Hello");
  55. TreeNode node=new TreeNode(1);
  56. node.left=new TreeNode(2);
  57. node.right=new TreeNode(3);
  58. node.right.left=new TreeNode(4);
  59. node.right.right=new TreeNode(5);
  60. Solution s=new Solution();
  61. ArrayList<Integer>list=s.inorderTraversal(node);
  62. for(int k:list)
  63. {
  64. System.out.print(k+" ");
  65. }
  66. }
  67. }

这里写图片描述

发表评论

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

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

相关阅读