Leetcode刷题100天—145. 二叉树的后序遍历(二叉树)—day08

举报
神的孩子在歌唱 发表于 2021/09/08 21:42:19 2021/09/08
【摘要】 前言:作者:神的孩子在歌唱大家好,我叫运智 145. 二叉树的后序遍历难度简单661收藏分享切换为英文接收动态反馈给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1]进阶: 递归算法很简单,你可以通过迭代算法完成吗?package 二叉树;import java.util.ArrayList;...

前言:

作者:神的孩子在歌唱

大家好,我叫运智

image-20210902105211837

145. 二叉树的后序遍历

难度简单661收藏分享切换为英文接收动态反馈

给定一个二叉树,返回它的 后序 遍历。

示例:

输入: [1,null,2,3]  
   1
    \
     2
    /
   3 

输出: [3,2,1]

进阶: 递归算法很简单,你可以通过迭代算法完成吗?

package 二叉树;

import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;

/*
 * 4
 * https://leetcode-cn.com/problems/binary-tree-postorder-traversal/ (递归+迭代)
 */
public class _145_二叉树的后序遍历 {
//	后序+递归
	public List<Integer> postorderTraversal(TreeNode root) {
//		后序:后序左子树,后序右子树,根节点
		List<Integer> res=new ArrayList<Integer>();

		preorder(res, root);
		return res;
	}
	public void preorder(List<Integer> res,TreeNode root) {
		
//		   终止循环条件
		if (root==null) {
			return;
		}
		preorder(res, root.left);
		preorder(res, root.right);
		res.add(root.val);	   
	}
//	后序+迭代
	public List<Integer> postorderTraversal2(TreeNode root) {
//		后序:后序左子树,后序右子树,根节点
		List<Integer> res=new ArrayList<Integer>();
		if (root==null) {
			return res;
		}
//		创建栈用于存放子树
		Deque<TreeNode> stack=new LinkedList<TreeNode>();
//		创建指针
		TreeNode node=root;
	    TreeNode prev = null;
//		如果到达叶子节点或者栈为空就终止循环
		while(node!=null||!stack.isEmpty()) {
//遍历左子树
			while(node!=null) {
				stack.push(node);
				node=node.left;
			}
//			弹出栈
			node=stack.pop();
//			遍历右子树,如果该节点右右子树就入栈
			if(node.right==null|| node.right== prev) {//node.right== prev是防止出现死循环
                // stack.push(node);
                res.add(node.val);
                prev = node;
                node = null;
				
			}else {
                stack.push(node);
				node=node.right;
				
			}
		}
		return res;
	}
}

本人csdn博客:https://blog.csdn.net/weixin_46654114

转载说明:跟我说明,务必注明来源,附带本人博客连接。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。