博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 94. Binary Tree Inorder Traversal
阅读量:6495 次
发布时间:2019-06-24

本文共 1481 字,大约阅读时间需要 4 分钟。

题目要求

Given a binary tree, return the inorder traversal of its nodes' values.For example:Given binary tree [1,null,2,3],   1    \     2    /   3return [1,3,2].Note: Recursive solution is trivial, could you do it iteratively?

中序遍历树,并将遍历结果添加到数组中。分别用递归和循环的方式结局。

递归

核心的思路就是先递归左侧子节点,之后读取中间节点的值,再递归右侧子节点。

public List
inorderTraversal(TreeNode root) { List
result = new ArrayList
(); inorderTraversal(root, result); return result; } public void inorderTraversal(TreeNode root, List
result){ if(root==null) return; inorderTraversal(root.left, result); result.add(root.val); inorderTraversal(root.right, result); }

循环

这里需要利用的数据结构。如果当前节点存在左子节点,则继续遍历左子树直到最后一个左子节点。然后依次处理栈中的元素。如果栈顶元素有右子节点,则将其右子节点压入栈中作为root,再继续遍历root的左子节点。当root和stack都为空时,遍历结束。

public List
inorderTraversal2(TreeNode root) { List
result = new ArrayList
(); if(root==null) return result; LinkedList
stack = new LinkedList
(); do{ while(root!=null){ stack.push(root); root = root.left; } root = stack.pop(); result.add(root.val); root = root.right; }while(!(stack.isEmpty() && root==null)); return result; }

clipboard.png

想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~

转载地址:http://wluyo.baihongyu.com/

你可能感兴趣的文章
为什么sql里面not in后面的子查询如果有记录为NULL的,主查询就查不到记录
查看>>
关于windows2008r2系统80端口被system进程占用的问题
查看>>
Angular7里面实现 debounce search
查看>>
Linux 内核链表
查看>>
git学习------>Git 分支管理最佳实践
查看>>
awk-for循环简单用法
查看>>
总是想把Linux服务器上的重要文件备份到本地,在此转一篇实现windows和linux互传文件的文章...
查看>>
经典网页设计:25个精美的全屏背景网站设计作品
查看>>
括号和出栈所有序列问题
查看>>
第一次操刀数据库分表的教训与经验
查看>>
录音声音小
查看>>
Ubuntu 12.04 安装 Chrome浏览器
查看>>
java 反射
查看>>
简单理解MapView 以及 设置 MKAnnotationView
查看>>
ORACLE物化视图(物理视图)
查看>>
android 读取json数据(遍历JSONObject和JSONArray)(转)
查看>>
UIScrollView中的手势
查看>>
递归和迭代的差别
查看>>
基于jquery的可拖动div
查看>>
可以简易设置文字内边距的EdgeInsetsLabel
查看>>