栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

LeetCode 94:二叉树的中序遍历 Binary Tree Inorder Traversal

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode 94:二叉树的中序遍历 Binary Tree Inorder Traversal

题目:

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

Given a binary tree, return the inorder traversal of its nodes’ values.

示例:

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

输出: [1,3,2]

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

Follow up: Recursive solution is trivial, could you do it iteratively?

解题思路:

百度百科:二叉树的中序遍历:https://baike.baidu.com/item/中序遍历

遍历顺序:左子节点 --> 根节点 --> 右子节点

如下所示的二叉树:

A
     /   
   BC
 /       /  
D    E   F    G

其遍历顺序为:D -> B -> E -> A ->F -> C -> G

二叉树遍历可以用 DFS(深度优先搜索)完成,其实现方式为:递归或借助数据结构 栈 迭代。

这种遍历方式本质上是一个先进后出的栈式遍历方式,递归方法实际也是用递归方式实现栈的先进后出。

DFS-递归:

Java:

class Solution {
    public List inorderTraversal(TreeNode root) {
 List list = new ArrayList<>();//数组
 dfs_recursion(root, list);//传入递归函数
 return list;
    }

    private void dfs_recursion(TreeNode node, List list) {
 if (node == null) return;//基线条件
 dfs_recursion(node.left, list);//先遍历左子节点
 list.add(node.val);//遍历到左子节点的顶点,取出该节点的值
 dfs_recursion(node.right, list);//递归遍历右节点
    }
}

Python3:

class Solution:
    def inorderTraversal(self, root: TreeNode) -> List[int]:
 #数组
 res = list()
 #传入递归函数
 self.dfs_recursion(root, res)
 return res

    def dfs_recursion(self, node: TreeNode, res: List[int]):
 #基线条件
 if not node: return
 #递归遍历左子节点
 self.dfs_recursion(node.left, res)
 #取顶点节点的值
 res.append(node.val)
 #递归遍历右子节点
 self.dfs_recursion(node.right, res)
DFS-迭代:

Java:

class Solution {
    public List inorderTraversal(TreeNode root) {
 List list = new ArrayList<>();//数组
 if (root == null) return list;
 Stack stack = new Stack<>();//用数据结构栈暂存节点
 TreeNode cur = root;//定义当前节点
 while (!stack.isEmpty() || cur != null) {//循环条件:栈不空或当前节点不空
     if (cur != null) {//当前节点不空时
  stack.push(cur);//当前节点入栈
  cur = cur.left;//刷新当前节点
     } else {//当前节点空时
  cur = stack.pop();//当前节点的父节点出栈
  list.add(cur.val);//数组存入节点的值
  cur = cur.right;刷新当前节点
     }
 }
 return list;
    }
}

Python:

class Solution:
    def inorderTraversal(self, root: TreeNode) -> List[int]:
 #初始化数组、栈
 res, stack = list(), list()
 #当前节点指向根节点
 cur = root
 #递归条件为:栈或当前节点非空
 while stack or cur:
     if cur:
  #当前节点非空时入栈
  stack.append(cur)
  #刷新当前节点
  cur = cur.left
     else:
  #当前节点为空时其父节点出栈
  cur = stack.pop()
  #其值存入数组
  res.append(cur.val)
  #刷新当前节点
  cur =cur.right
 return res

一起学习吖,欢迎关注:爱写Bug

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号