二叉树的遍历

64 阅读1分钟

什么是二叉树:

是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成。

前序遍历

题目:144. 二叉树的前序遍历
根左右

/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var preorderTraversal = function(root) {
    let arr = []
    function preorder(root) {
        if (!root) return
        arr.push(root.val)
        preorder(root.left)
        preorder(root.right)
    }
    preorder(root)
    return arr
};

中序遍历

题目:94. 二叉树的中序遍历
左根右 (升序)

/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var inorderTraversal = function(root) {
    let arr = []
    function inorder (root) {
        if (!root) return

        inorder(root.left)
        arr.push(root.val)
        inorder(root.right)
    }
    inorder(root)
    return arr
};

后序遍历

题:145. 二叉树的后序遍历
左右根

/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var postorderTraversal = function(root) {
    let arr = []
    function postorder(root) {
        if (!root) return
        postorder(root.left)
        postorder(root.right)
        arr.push(root.val)
    }
    postorder(root)
    return arr
};

做一些题

  1. 230. 二叉搜索树中第K小的元素
var inorderTraversal = function(root) {
    let arr = []
    function inorder (root) {
        if (!root) return

        inorder(root.left)
        arr.push(root.val)
        inorder(root.right)
    }
    inorder(root)
    return arr
};

/**
 * @param {TreeNode} root
 * @param {number} k
 * @return {number}
 */
var kthSmallest = function(root, k) {
    let arr = inorderTraversal(root)
    return arr[k - 1]
};