LeetCode 之 JavaScript 解答第94题 —— 二叉树的中序遍历

题目:Binary Tree Inorder Traversal(二叉树中序遍历)

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

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

Example:

Input:[1,null,2,3]1\2/3Output:[1,3,2]

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

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

solve:

▉ 问题分析

2)通常递归的方法解决二叉树的遍历最方便不过,但是我还是喜欢增加点难度,用一般的迭代循环来实现。

▉ 算法思路

递归法:

1)判断当前树是否为空。

2)递归树的左子树结点。

3)输出当前结点的值。

4)递归树的右子树节点。

迭代循环法:

1)声明一个栈,将树的左子节点入栈。

2)每出栈一个结点,输出当前结点的值,且将该结点的右子树进行遍历打印,保证每个出栈的结点输出值之后,再输出上一个左子节点之前,将当前结点的右子节点遍历毕。

3)整棵树遍历完毕的终止条件就是当前栈是否存在结点(树的左子节点)。

▉ 递归实现

varinorderTraversal =function(root){letarr = []constinorder =root=>{// 判断当前的结点是否为空if(root ==null)returnnull;// 递归左子树inorder(root.left)// 输出结点值arr.push(root.val)// 递归右子树inorder(root.right)    }    inorder(root)returnarr};

▉ 迭代实现

// 迭代实现二叉树的中序遍历varinorderTraversal =function(root){letstack = [];letresult = [];while(true){// 判断树是否为空if(root ==null)returnresult;// 先将树的左子节点推入栈中while(root !==null){            stack.push(root);            root = root.left;        }// 遍历的终止条件if(stack.length !==0){// 输出栈中的结点lettemp = stack.pop();            result.push(temp.val);// 如果当前存在右子节点,要先打印右子树节点root = temp.right;        }else{break;        }    }returnresult;}

进群:697699179可以获取Java各类入门学习资料!

这是我的微信公众号【编程study】各位大佬有空可以关注下,每天更新Java学习方法,感谢!

学习中遇到问题有不明白的地方,推荐加小编Java学习群:697699179内有视频教程 ,直播课程 ,等学习资料,期待你的加入

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容