树的遍历方式总体分为两类:深度优先搜索(DFS)、广度优先搜索(BFS);
常见的 DFS : 先序遍历、中序遍历、后序遍历;
前序遍历:输出顺序:根节点、左子树、右子树
中序遍历:输出顺序:左子树、根节点、右子树
后序遍历:输出顺序:左子树、右子树、根节点
常见的 BFS : 层序遍历(即按层遍历)。

剑指 Offer 27. 二叉树的镜像

例如输入:
      4
  2      7
1   3  6   9

镜像输出:
     4
  7     2
9   6  3   1

输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]

var mirrorTree = function(root) {
    let res = null;
    if(root != null){
        res =new TreeNode(root.val);
        res.left = mirrorTree(root.right);
        res.right = mirrorTree(root.left);
    }
    return res 
};

剑指 Offer 28. 对称的二叉树

https://leetcode-cn.com/leetbook/read/illustrate-lcof/xsrxq1/

  • 时间复杂度:O(n)
    var isSymmetric = function(root) {
      if(root==null){
          return true;
      }
      return dfs(root.left,root.right)
    };
    var dfs = function(t1, t2){
      if(t1==null && t2==null) {return true}
      if(t1==null|| t2==null) {return false}
      if(t1.val != t2.val){return false}
      return dfs(t1.left,t2.right) && dfs(t1.right,t2.left)
    }

剑指 Offer 54. 二叉搜索树的第 k 大节点

https://leetcode-cn.com/leetbook/read/illustrate-lcof/xspy85/

  • 时间复杂度:O(n),空间复杂度:O(1)
  • 二叉搜索树:根节点的值大于其左子树中任意一个节点的值,小于其右节点中任意一节点的值,这一规则适用于二叉查找树中的每一个节点。
  • 二叉搜索树的【中序遍历】为 【递增序列】,易得二叉搜索树的 【中序遍历倒序】 为 【递减序列】 。
    因此,求 “二叉搜索树第 k大的节点” 可转化为求 “此树的【中序遍历倒序】的第 k 个节点”。 中序遍历 为 “左、根、右” 顺序,倒序就是“右、根、左” 。
    时间复杂度:O(n),空间复杂度:O(1)
    var nums;
    var res;
    var kthLargest = function(root, k) {
      nums = k
      dfs(root);
      return res;
    };
    var dfs = function(root){
      if(root == null){
          return;
      }
      dfs(root.right);
      if(nums == 0){
          return
      }
      nums --;
      if(nums==0){
          res = root.val
      }
      dfs(root.left)
    }

    剑指 Offer 55 - I. 二叉树的深度

    https://leetcode-cn.com/leetbook/read/illustrate-lcof/xsaki2/
  • 时间复杂度:O(n),空间复杂度:O(1)
    var maxDepth = function(root) {
      if(root == null){
          return 0
      }
      return Math.max(maxDepth(root.left),maxDepth(root.right))+1
    };

喜爱一切可爱的事物~