二叉树前中序遍历

按照节点顺序
前序遍历-> 中左右
中序遍历 -> 左中右
后序遍历 -> 左右中
leetCode题目连接
leetCode 前序遍历

 * Definition for a binary tree node.
 * class TreeNode {
 *     val: number
 *     left: TreeNode | null
 *     right: TreeNode | null
 *     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.left = (left===undefined ? null : left)
 *         this.right = (right===undefined ? null : right)
 *     }
 * }
 */

// 递归遍历 (递归场景下只要修改 中,左,右节点的存储顺序即可满足 前中后序遍历)
function preorderTraversal(root: TreeNode | null): number[] {
  if(!root) {return []} // 终止条件
   const rootList: number[] = []
   rootList.push(root.val) // 存储值
  return rootList.concat(preorderTraversal(root.left)).concat(preorderTraversal(root.right))
};

// 迭代遍历
function loopPreorderTraversal() {
  if(!root) return []
   const stack = []
   const result = []
   stack.push(root)
   while(stack.length) {
       const cur = stack.pop()
       result.push(cur.val)
       if(cur.right !== null) {
           stack.push(cur.right)
       }
       if(cur.left !==null) {
         stack.push(cur.left)
       }
  }
   return result
   }

中序遍历

// 采用递归方法
function inorderTraversal(root: TreeNode | null): number[] {
    if(!root) return []
    const stack = []
    const res = []
    let curNode = root // 节点指针
    while(stack.length || curNode) { // 当栈中的数据清空或者当前节点为空 退出循环
        if(curNode){ // 一直去找到二叉树最左侧节点
            stack.push(curNode) 
            curNode = curNode.left
        } else {
            curNode = stack.pop()
            res.push(curNode.val)
            curNode = curNode.right
        }
    }
    return res
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值