144-94-145-遍历二叉树
标签:栈 树 深度优先搜索 二叉树
题目信息
144. 二叉树的前序遍历
题目地址: 144. 二叉树的前序遍历
题目内容:
javascript
给你二叉树的根节点root,返回它节点值的前序遍历。
示例1:
输入:root = [1,null,2,3]
输出:[1,2,3]
示例2:
输入:root = []
输出:[]
示例3:
输入:root = [1]
输出:[1]
示例4:
输入:root = [1,2]
输出:[1,2]
示例5:
输入:root = [1,null,2]
输出:[1,2]
提示:
树中节点数目在范围 [0, 100]内
-100 <= Node.val <= 100
进阶:递归算法很简单,你可以通过迭代算法完成吗?
解法一
思路:
使用
递归
,二叉树的前序遍历
按照中左右
的顺序来遍历
代码实现:
javascript
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number[]}
*/
var preorderTraversal = function(root) {
const res = []
const traverseFn = (res, treeNode) => {
if(treeNode === null) return
res.push(treeNode.val)
traverseFn(res, treeNode.left)
traverseFn(res, treeNode.right)
}
traverseFn(res, root)
return res
};
解法二
思路:
使用
迭代法
来实现,这里具体是使用栈
来实现迭代法
代码实现:
javascript
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number[]}
*/
var preorderTraversal = function(root) {
const res = []
const stack = [root]
while(stack.length) {
const curNode = stack.pop()
if(!curNode) continue
res.push(curNode.val)
if(!!curNode.right) {
stack.push(curNode.right)
}
if(!!curNode.left) {
stack.push(curNode.left)
}
}
return res
};
94. 二叉树的中序遍历
题目地址: 94. 二叉树的中序遍历
题目内容:
javascript
给定一个二叉树的根节点root ,返回它的中序遍历。
示例1:
输入:root = [1,null,2,3]
输出:[1,3,2]
示例2:
输入:root = []
输出:[]
示例3:
输入:root = [1]
输出:[1]
提示:
树中节点数目在范围 [0, 100] 内
-100 <= Node.val <= 100
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
解法一
思路:
二叉树的
中序遍历
按照左中右
的顺序来遍历
代码实现:
javascript
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number[]}
*/
var inorderTraversal = function(root) {
const res = []
const traverseFn = (res, treeNode) => {
if(treeNode === null) return
traverseFn(res, treeNode.left)
res.push(treeNode.val)
traverseFn(res, treeNode.right)
}
traverseFn(res, root)
return res
};
145. 二叉树的后序遍历
题目地址: 145. 二叉树的后序遍历
题目内容:
javascript
给你一棵二叉树的根节点root,返回其节点值的后序遍历。
示例1:
输入:root = [1,null,2,3]
输出:[3,2,1]
示例2:
输入:root = []
输出:[]
示例3:
输入:root = [1]
输出:[1]
提示:
树中节点的数目在范围 [0, 100] 内
-100 <= Node.val <= 100
进阶:递归算法很简单,你可以通过迭代算法完成吗?
示例1
图片
解法一
思路:
二叉树的
后序遍历
按照左右中
的顺序来遍历
代码实现:
javascript
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number[]}
*/
var postorderTraversal = function(root) {
const res = []
const traverseFn = (res, treeNode) => {
if(treeNode === null) return
traverseFn(res, treeNode.left)
traverseFn(res, treeNode.right)
res.push(treeNode.val)
}
traverseFn(res, root)
return res
};