算法通关村第七关|黄金挑战|迭代实现二叉树的前、中、后序遍历

1.迭代实现前序遍历

java 复制代码
public List<Integer> preOrderTraversal(TreeNode root) {
	List<Integer> res = new ArrayList<Integer>();
	if (root == null) {
        return res;
    }
	Deque<TreeNode> stack = new LinkedList<TreeNode>();
	TreeNode node = root;
	while (!stack.isEmpty() || node != null) {
        while (node != null) {
            res.add(node.val);
            stack.push(node);
            node = node.left;
        }
        node = stack.pop();
        node = node.right;
    }
	return res;
}

2.迭代实现中序遍历

java 复制代码
public List<Integer> inorderTraversal(TreeNode root) {
	List<Integer> res = new ArrayList<Integer>();
	Deque<TreeNode> stack = new LinkedList<TreeNode>();
	while (root != null || !stack.isEmpty()) {
        while (root != null) {
            stack.push(root);
            root = root.left;
        }
        root = stack.pop();
        res.add(root.val);
        root = root.right;
    }
	return res;
}

3.迭代实现后序遍历(反转法)

将后序遍历的结果反过来就是类似于前序遍历的结果,只不过前序遍历先找左孩子,后序反过来是先找右孩子。

java 复制代码
public List<Integer> postOrderTraversal(TreeNode root) {
	List<Integer> res = new ArrayList<>();
	if (root == null) {
        return res;
    }
	Deque<TreeNode> stack = new LinkedList<TreeNode>();
	TreeNode node = root;
	while (!stack.isEmpty() || node != null) {
        while (node != null) {
            res.add(node.val);
            stack.push(node);
            node = node.right;
        }
        node = stack.pop();
        node = node.left;
    }
	Collections.reverse(res);
	return res;
}

如果对您有帮助,请点赞关注支持我,谢谢!❤

如有错误或者不足之处,敬请指正!❤

个人主页:星不易

算法通关村专栏:不易|算法通关村

相关推荐
不吃香菜学java8 小时前
Redis的java客户端
java·开发语言·spring boot·redis·缓存
captain3768 小时前
事务___
java·数据库·mysql
北漂Zachary9 小时前
四大编程语言终极对比
android·java·php·laravel
小江的记录本9 小时前
【网络安全】《网络安全常见攻击与防御》(附:《六大攻击核心特性横向对比表》)
java·网络·人工智能·后端·python·安全·web安全
白羊by9 小时前
YOLOv1~v11 全版本核心演进总览
深度学习·算法·yolo
嗑嗑嗑瓜子的猫10 小时前
Java!它值得!
java·开发语言
墨尘笔尖11 小时前
最大最小值降采样算法的优化
c++·算法
2401_8955213411 小时前
【Spring Security系列】Spring Security 过滤器详解与基于JDBC的认证实现
java·后端·spring
皮卡蛋炒饭.11 小时前
线程的概念和控制
java·开发语言·jvm
一只大袋鼠11 小时前
MyBatis 入门详细实战教程(一):从环境搭建到查询运行
java·开发语言·数据库·mysql·mybatis