leetcode 二叉树部分刷题的一些总结

Leetcode二叉树刷题总结

  • 二叉树的认识
  • 二叉树的遍历

二叉树的认识

二叉树是指最多只有两个节点分支的一颗树,习惯性得将一个节点的两个孩子记做左孩子以及右孩子。
leetcode 二叉树部分刷题的一些总结_第1张图片
上图就是一颗二叉树,一般来说其左右的区分只是相对于其父辈以及祖辈节点而言。一颗二叉树的典型结构体定义如下:

 struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),right(right) {}
};

通过代码显然可见的是对于一个二叉树的节点,其中有3个基本的元素,分别是:

  • val——表示二叉树上当前节点值
  • left,right ——表示当前节点的左右孩子指针
  • 3 method——表示构造这个节点的3中不同的方法,第一种是默认构造一个值为0,左右孩子为空的节点(相当于叶子节点);第二种是传入一个int参数值,来构造一个值为x的叶子节点;第三种则是不仅传入节点值,而且可以指定该节点的左右孩子节点。

二叉树的遍历

提到二叉树,就不得会提到如何去遍历一颗二叉树。所谓遍历就是通过一种规则依次输出树中每个节点的值。

最基础的是3种遍历方法就是前,中,后序遍历,这里的前、中、后就时指的是中间节点在遍历时所在的位置,而左孩子节点永远先于右孩子节点。
leetcode 二叉树部分刷题的一些总结_第2张图片

对于任意一颗二叉树都可以局部分解成这样一种三角结构(如上图中的红框),从根节点出发,第一个三角结构是FBG这样子,其中F为中间节点,如果是前序遍历,则排序为FBG中序遍历为BGF后序遍历为BGF

因此,根据上述规则,通过前序遍历完上述整颗二叉树的步骤如下所示:

  1. -->F B G——然后根据左孩子先于右孩子原则,走向节点B
  2. -->F (B A D) G——以B作为中间节点,继续遍历其对应的三角区域
  3. -->F (B A D C E) G——A为叶子节点,所以跳过,走向D
  4. --> F (B A D C E) (G I)——整个左边遍历结束,然后处理右边节点,走向G
  5. --> F (B A D C E) (G I H)——G无左孩子,跳过,走向II无右孩子,最后遍历结束

之后的中序遍历以及后序遍历也是类似如此,化成小三角区域可以解决。

你可能感兴趣的:(leetcode刷题知识,1024程序员节)