1. 程式人生 > 實用技巧 >LeetCode 144 94 590 二叉樹的前序、中序、後序遍歷

LeetCode 144 94 590 二叉樹的前序、中序、後序遍歷

1. 總覽

2. 題目

2.1 二叉樹的前序遍歷

給定一個二叉樹,返回它的 前序 遍歷。

示例:

輸入: [1,null,2,3]
1

2
/
3

輸出: [1,2,3]
進階: 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?

2.2 二叉樹的中序遍歷

給定一個二叉樹,返回它的中序 遍歷。

示例:

輸入: [1,null,2,3]
1

2
/
3

輸出: [1,3,2]
進階: 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?

2.3 二叉樹的後序遍歷

給定一個二叉樹,返回它的 後序 遍歷。

示例:

輸入: [1,null,2,3]
1

2
/
3

輸出: [3,2,1]
進階: 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?

解法

1. 最普通的遞迴

1. 前序遍歷

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var preorderTraversal = function(root) {
  let nums = [];
  let func = (root) => {
    nums.push(root.val);
    root.left && func(root.left);
    root.right && func(root.right);
  }
  root && func(root);
  return nums;
};

2. 中序遍歷

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var inorderTraversal = function(root) {
  let nums = [];
  let func = (root) => {
    root.left && func(root.left);
    nums.push(root.val);
    root.right && func(root.right);
  }
  root && func(root);
  return nums;
};

後序遍歷

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var postorderTraversal = function(root) {
  let nums = [];
  let func = (root) => {
    root.left && func(root.left);
    root.right && func(root.right);
    nums.push(root.val);
  }
  root && func(root);
  return nums;
};