您的位置 首页 java

每天一算法:「树」中序遍历二叉树

题目:通过率 21.8% 难度:中等

描述:

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

每天一算法:「树」中序遍历二叉树

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


每天一算法:「树」中序遍历二叉树

代码模板


每天一算法:「树」中序遍历二叉树

解题思路:

中序遍历 (LDR)是二叉树遍历的一种,也叫做中根遍历、中序周游。在二叉树中,先左后根再右。巧记:左根右。

每天一算法:「树」中序遍历二叉树

如图中序遍历结果为:DBEAFC

题中说明了 要求使用 迭代法

使用一个栈来存储二叉树节点,根据中序遍历的规则,我们可以推算出这样的规律:

1. 将当前非空节点入栈

2. 如果左子节点不为空,则继续将左子节点入栈

3. 如果左子节点为空,则抛出栈顶节点并记录 val 值,然后将其右子节点入栈

4. 重复 1、2、3 步骤直至栈空

代码:

每天一算法:「树」中序遍历二叉树

源代码:


/**

* Definition for a binary tree node.

* public class TreeNode {

* int val;

* TreeNode left;

* TreeNode right ;

* TreeNode(int x) { val = x; }

* }

*/

class Solution {

public List< Integer > inorderTraversal(TreeNode root) {

Stack<TreeNode> stack = new Stack<TreeNode>();

ArrayList<Integer> result = new ArrayList<Integer>();

TreeNode curt = root;

while (curt != null || !stack.empty()) {

while (curt != null) {

stack.add(curt);

curt = curt.left;

}

curt = stack.pop();

result.add(curt.val);

curt = curt.right;

}

return result;

}

}


运行结果:

文章来源:智云一二三科技

文章标题:每天一算法:「树」中序遍历二叉树

文章地址:https://www.zhihuclub.com/170056.shtml

关于作者: 智云科技

热门文章

网站地图