迭代实现二叉树的遍历-算法通关村

时间:2024-03-27 08:30:33
public List<Integer> postOrderTraversal(TreeNode root){ List<Integer> res = new ArrayList<>(); if(root == null){ return res; } Deque<TreeNode> stack = new LinkedList<>(); TreeNode node = root; while(!stack.isEmpty() || node != null){ //将当前节点的值添加到结果列表res中, // 然后将当前节点入栈,并将node更新为其右子节点。 // 这个循环会一直执行,直到当前节点为空 while(node != null){ res.add(node.val); stack.push(node); node = node.right; } node = stack.pop(); //将node更新为该节点的左子节点,以便后续遍历左子树。 node = node.left; } //列表中的顺序是左子树-右子树-根节点。 // 但是后序遍历的正确顺序应该是左子树-右子树-根节点, // 所以需要将结果列表res反转。 Collections.reverse(res); return res; }