【数据结构与算法】先序遍历(前序遍历)的非递归实现

回忆一下递归实现

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) {
	var retArr = []
	if (!root) return retArr
	var helpFunc = (r) => {
        if (!r)return 
		retArr.push(r.val)
		if (r.left) { helpFunc(r.left) }
		if (r.right) { helpFunc(r.right)}
	}
	helpFunc(root)
	return retArr
}

用模拟栈来实现

javascript 复制代码
var preorderTraversal = function(root) {
	var retArr = []
	if (!root) return retArr
	var stack = []
	stack.push(root)
	while(stack.length !== 0) {
		var popE = stack.pop()
		retArr.push(popE.val)
		if (popE.right) {
			stack.push(popE.right)
		}
		if (popE.left) {
			stack.push(popE.left)
		}
	}
	return retArr
}
相关推荐
楽码30 分钟前
理解自动修复:编程语言的底层逻辑
后端·算法·编程语言
艾小码40 分钟前
告别jQuery:2025年原生DOM操作最佳实践
前端·javascript·jquery
汪子熙41 分钟前
Git 是如何检测本地 commit 中包含敏感信息的?背后的技术原理解析
javascript·后端·面试
林太白42 分钟前
npm发包自己的组件并安装更新版本应该如何做?
前端·javascript·后端
余_弦1 小时前
区块链中的密码学 —— 零知识证明
算法·区块链·以太坊
Xi_Xu1 小时前
Xget:为您的开发工作流解锁极致速度
javascript·api
遂心_1 小时前
Next.js 入门实战:从零构建你的第一个 SSR 应用
前端·javascript·next.js
stone51951 小时前
TOTP算法与HOTP算法
c语言·物联网·算法·嵌入式·iot平台·智能门锁
PineappleCoder1 小时前
👶 小孩报数问题:当熊孩子遇上“约瑟夫环
前端·算法