LeetCode[94/100/101]二叉树的中序遍历、相同的树、 对称二叉树 C/C++——Week 2 I

二叉树

1.二叉树的概念

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

即使只有一个孩子,也要严格区分左右 。且二叉树和树是两种树结构。

2.二叉树的基本形态

空树、仅有根、左子树为空、右子树为空、左子树与右子树均不为空。

3.二叉树的遍历

遍历:沿某条搜索路径周游二叉树,对每个结点访问一次且仅访问一次。

非线性结构遍历,得到结点按某种次序排列的一个线性序列,所以遍历可看成非线性结构到线性结构的一种映射方法。

二叉树的遍历有两个:层次遍历递归遍历

递归遍历:
如果限定先左后右,则二叉树遍历方式有三种:
前序:DLR、中序:LDR、后序:LRD(此时二叉树由根结点D、左子树L、右子树R构成)。

层次遍历:按二叉树的层序编号的次序访问各结点。

94.二叉树的中序遍历

题目描述[简单]:

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。

示例1:
LeetCode[94/100/101]二叉树的中序遍历、相同的树、 对称二叉树 C/C++——Week 2 I_第1张图片

输入:root = [1,null,2,3]
输出:[1,3,2]

思想[递归]:

首先我们先看中序遍历的定义:
若二叉树为空,则空操作返回;
否则:
①中序遍历根结点的左子树;
②访问根结点;
③中序遍历根结点的右子树。
根据其性质,我们要用递归不断套用,很容易写出其代码。

C++代码:

/**
 * Definition for a binary tree node.
 * 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) {}
 * };
 */
class Solution {
   
public:
    void inorder(TreeNode* root, vector<int>& r) {
   
         if(root!=NULL) 

你可能感兴趣的:(LeetCode刷题,leetcode,c语言,c++)