二叉树非递归后序遍历(java)

╰半夏微凉° 2023-07-13 13:53 88阅读 0赞
  1. // 非递归后序遍历
  2. public static void postorderTraversal(TreeNode root) {
  3. Stack<TreeNode> treeNodeStack = new Stack<TreeNode>();
  4. TreeNode node = root;
  5. TreeNode lastVisit = root;//设置游标判断右子树
  6. while (node != null || !treeNodeStack.isEmpty()) { //如果节点不为空且栈不为空
  7. while (node != null) { //如果节点不为空
  8. treeNodeStack.push(node);//将节点入栈
  9. node = node.left;//先看左子树
  10. }
  11. node = treeNodeStack.peek();//查看栈顶元素
  12. //如果其右子树也为空,或者右子树已经访问
  13. //则可以直接输出当前节点的值
  14. if (node.right == null || node.right == lastVisit) {
  15. System.out.print(node.val + " ");
  16. treeNodeStack.pop();//出栈
  17. lastVisit = node;//将当前节点设为游标
  18. node = null;//节点设为空
  19. } else { //如果其右子树不为空,以及右子树未访问
  20. node = node.right; //否则,继续遍历右子树
  21. }
  22. }
  23. }

发表评论

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

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

相关阅读