Leetcode【二叉树】:Binary Tree Postorder Traversal 题解(非递归解法),可以说是【二叉树】入门必须掌握

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].

Note: Recursive solution is trivial, could you do it iteratively?


先说二叉树递归的解法:

直接上代码:

public class MyOwnSolution {

	public ArrayList<Integer> postorderTraversal(TreeNode root){
		ArrayList<Integer> result = new ArrayList<Integer>();
		
		if(root == null )
			return result;
		
		result.addAll(postorderTraversal(root.left));
		result.addAll(postorderTraversal(root.right));
		result.add(val);
		
		return result;
	}
}
addAll方法自己查api

下面写非递归方法:

首先把根节点push进栈里边

然后执行一个while循环,结束的条件是栈空:下边进行循环:

取出栈顶节点

if(栈顶节点为叶子节点):那么返回节点的值到数组里边,同时把栈顶节点压出栈;结束本次循环(continue)

if(栈顶节点左孩子不为空):那么把栈顶节点的左孩子压进栈,同时把左孩子标记为空(top.leftNode = null);结束本次循环(continue)

if(栈顶节点右孩子不为空):那么把栈顶节点的右孩子压进栈,同时把右孩子标记为空(top.leftNode = null);结束本次循环(continue)

import java.util.ArrayList;
import java.util.Stack;



public class Solution {
	public ArrayList<Integer> postorderTraversal(TreeNode root){
		Stack<TreeNode> stack = new Stack<TreeNode>();
		ArrayList<Integer> result = new ArrayList<Integer>();
		
		if(root == null){
			return result;
		}
		
		stack.push(root);
		while(!stack.isEmpty()){
			
			TreeNode top = stack.peek();
			
			if(top.left == null && top.right == null){
				result.add(top.val);
				stack.pop();
				continue;
			}
			
			if(top.left != null){
				stack.push(top.left);
				top.left = null;
				continue;
			}
			
			if(top.right != null){
				stack.push(top.right);
				top.right = null;
				continue;
			}
		}
		
		return result;
	}
}
自己画一个二叉树,然后对着我的语言伪代码看一遍,肯定能懂
AC的一刻还是比较爽的!!!我想这就是坚持下去的原因

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值