本文主要是介绍【注释详细,思路清晰】【打卡第2天】leetcode热题HOT100之Java实现:94、二叉树的中序遍历(使用栈),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、题目描述
二叉树的中序遍历(使用栈)
给定一个二叉树的根节点 root ,返回它的 中序 遍历。
示例 1:
输入:root = [1,null,2,3]
输出:[1,3,2]
2、算法分析
① 二叉树的中序遍历,使用栈辨别二叉树的结点和集合List存储二叉树中结点的值
② 当栈不空,因为初始栈都是空的,说明栈中是存储元素的;当前结点不为空的时候遍历
③ 当当前结点不为空的时候,遍历其左孩子,然后入栈
④ 当当前结点为空的时候,从栈中出栈元素,继续遍历右孩子
总结下:
遇到二叉树的遍历首先想到。
使用一个容器存储树结点,TreeNode。Stack或者是Queue
若返回结点值的话,使用List容器存储结点值
3、代码实现
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*//*二叉树的中序遍历给定一个二叉树的根节点root,返回中序遍历栈存储结点集合存储的是结点中的元素*/
import java.util.*;class Solution {public List<Integer> inorderTraversal(TreeNode root) {// 定义一个集合存储树中的结点的值,注意返回的是ListList<Integer> list = new ArrayList<Integer>();// 定义一个栈结构,存储的是树中结点Stack<TreeNode> stack = new Stack<TreeNode>();// 定义当前元素TreeNode currentNode = root;// 当栈不空,或者是根节点不空的时候,符合条件// 因为初始栈都为空,存储元素后都需要遍历出来,所以判断栈不空while(currentNode != null || !stack.isEmpty()){// 当前元素不为空的时候if(currentNode != null){// 将当前元素进栈stack.push(currentNode);// 当前元素左孩子currentNode = currentNode.left;} else{// 当前元素为空的时候,栈内出栈元素currentNode = stack.pop();// 将当前元素添加到集合中list.add(currentNode.val);// 判断出栈元素的右孩子currentNode = currentNode.right;}}return list;}
}
这篇关于【注释详细,思路清晰】【打卡第2天】leetcode热题HOT100之Java实现:94、二叉树的中序遍历(使用栈)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!