代码随想录训练营Day14 | 二叉树遍历

2023-10-24  本文已影响0人  是小张啊啊
二叉树的遍历方式
  1. 深度优先遍历
举例: image.png

前序遍历:5、4、1、2、6、7、8
中序遍历:1、4、2、5、7、6、8
后序遍历:1、2、4、7、8、6、5

  1. 广度优先遍历
二叉树的存储方式

二叉树可以链式存储,也可以顺序存储

144. 二叉树的前序遍历
递归实现
var preorderTraversal = function(root) {
    let res = [];
    var traversal = function(cur) {
      if (cur === null) {
        return
      }
      res.push(cur.val)
      traversal(cur.left)
      traversal(cur.right)
    }
    traversal(root)
    return res;
};
迭代实现
var preorderTraversal = function(root) {
    if (!root) return []
    let res = [];
    let stack = [];
    stack.push(root)
    while(stack.length) {
        let cur = stack.pop()
        res.push(cur.val)
        if (cur.right) {
            stack.push(cur.right)
        }
        if (cur.left) {
            stack.push(cur.left)
        }
    }
    return res;
};
94. 二叉树的中序遍历
递归实现
var inorderTraversal = function(root) {
    let res = [];
    var traversal = function(root) {
        if (root === null) {
            return
        }
        traversal(root.left);
        res.push(root.val)
        traversal(root.right);
    }
    traversal(root)
    return res;
};
迭代实现
var inorderTraversal = function(root) {
    let res = [];
    // 迭代遍历 左中右
    let cur = root;
    let stack = [];
    while (cur !== null || stack.length) {
        if (cur !== null) {
            stack.push(cur)
            cur = cur.left
        } else {
            cur = stack.pop()
            res.push(cur.val)
            cur = cur.right
        }
    }
    return res;
};
145. 二叉树的后序遍历
递归实现
var postorderTraversal = function(root) {
    let res = [];
    var traversal = function(root) {
        if (root === null) {
            return
        }
        traversal(root.left);
        traversal(root.right);
        res.push(root.val)
    }
    traversal(root)
    return res;
};
迭代实现
var postorderTraversal = function(root) {
    if (!root) return []
    let res = [];
    let stack = [];
    stack.push(root)
    while(stack.length) {
        let cur = stack.pop()
        res.push(cur.val)
        if (cur.left) {
            stack.push(cur.left)
        }
        if (cur.right) {
            stack.push(cur.right)
        }
    }
    return res.reverse();
};
上一篇 下一篇

猜你喜欢

热点阅读