Binary Tree Postorder Traversal

本文介绍了一种实现二叉树后序遍历的方法,包括递归和非递归两种实现方式。递归实现简单直观,而非递归实现则通过栈结构来模拟递归过程,避免了递归带来的潜在栈溢出风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given a binary tree, return the postorder traversal of its nodes' values.

For example:

Given binary tree {1,#,2,3},

   1
    \
     2
    /
   3
return [3,2,1].

递归实现:

public List<Integer> postorderTraversal(TreeNode root) {
	List<Integer> result=new ArrayList<Integer>();
	if(root==null)
		return result;
	result.addAll(postorderTraversal(root.left));
	result.addAll(postorderTraversal(root.right));
	result.add(root.val);
	return result;
}

循环实现:

public List<Integer> postorderTraversal(TreeNode root) {
	ArrayList<Integer> result = new ArrayList<Integer>();
	Stack<TreeNode> stack = new Stack<TreeNode>();
	TreeNode prev = null; // previously traversed node
	TreeNode curr = root;
	if (root == null) 
		return result;
	stack.push(root);
	while (!stack.empty()) {
		curr = stack.peek();
		if (prev == null || prev.left == curr || prev.right == curr) { // traverse down the tree
			if (curr.left != null) 
				stack.push(curr.left);
			else if (curr.right != null)
				stack.push(curr.right);
		} else if (curr.left == prev) { // traverse up the tree from the left
			if (curr.right != null) 
				stack.push(curr.right);
		} else { // traverse up the tree from the right
			result.add(curr.val);
			stack.pop();
		}
		prev = curr;
	}
	return result;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值