/**
* 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;
* }
* }
*/
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
/*
此道题目要求我们进行的是迭代遍历
迭代遍历的核心是神魔呢?
中序遍历的方式 左中右
我们从左下角的元素开始输出
遍历左树 中树 右树
思路: 我们定义一个栈保存我们的最左边的一条树链
https://www.bilibili.com/video/BV19t411w7Ep
然后每次输出最左边的一个值,然后其根节点 ,然后右树的值
主要思想:
将一棵树的做最左边的一条链路加入到栈中,然后不断弹出栈顶元素,得到根节点,同时将这个根节点的右树加入到栈中去,再次遍历
*/
List<Integer> list = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
while(root != null || stack.size()!= 0 ){
while(root != null){
stack.push(root);
root = root.left;
}//将所有的最左边的一条链路加入到了栈中 栈顶元素为最左下端的节点
TreeNode p = stack.pop();//弹出当前栈顶元素,就是树的左下角的起始遍历元素
list.add(p.val);//将其值添加到结果链表中
root = p.right;//再遍历其右子树
}
return list;
}
}
迭代方式求一个树的中序遍历(使用的栈)
最新推荐文章于 2022-07-12 23:24:38 发布