没有孩子的节点是叶子节点

树的高度是从下往上算的,叶子结点的高度是0,根节点的高度最大

树的深度是从上往下算的,根节点的深度是0,叶子结点的深度最大

层是从上往下看的,根节点是第一层,越往下层数越多

 

满二叉树:除了叶子节点每个节点都有两个孩子

完全二叉树:从树的根节点从上到下,从左到右依次填满节点形成的二叉树 

 

二叉树遍历

前序遍历:根节点->左子树->右子树

中序遍历:左子树->根节点->右子树

后序遍历:左子树->右子树->根节点

 

144

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。

 

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

输入:root = []
输出:[]
示例 3:

输入:root = [1]
输出:[1]

 

/**
 * 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:
    std::vector<int> preOrder(TreeNode* root, std::vector<int> &ret_vec)
    {
        if (root == nullptr)
        {
            return ret_vec;
        }
        else
        {
            ret_vec.push_back(root->val);
            preOrder(root->left, ret_vec);
            preOrder(root->right, ret_vec);
            return ret_vec;
        }
    }
    vector<int> preorderTraversal(TreeNode* root) {
        std::vector<int> ret_vec = {};
        preOrder(root, ret_vec);
        return ret_vec;
    }
};

 

94

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

 

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

输入:root = []
输出:[]
示例 3:

输入:root = [1]
输出:[1]
 

提示:

树中节点数目在范围 [0, 100] 内
-100 <= Node.val <= 100

/**
 * 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:
    std::vector<int> inOrder(TreeNode* root, std::vector<int> &ret_vec)
    {
        if (root == nullptr)
        {
            return ret_vec;
        }
        else
        {
            inOrder(root->left, ret_vec);
            ret_vec.push_back(root->val);
            inOrder(root->right, ret_vec);
            return ret_vec;
        }
    }
    vector<int> inorderTraversal(TreeNode* root) {
        std::vector<int> ret_vec;
        inOrder(root, ret_vec);
        return ret_vec;
    }
};

 

145

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。

示例 1:

 

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

输入:root = []
输出:[]
示例 3:

输入:root = [1]
输出:[1]
 

提示:

树中节点的数目在范围 [0, 100] 内
-100 <= Node.val <= 100

/**
 * 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:
    std::vector<int> postOrder(TreeNode* root, std::vector<int> &ret_vec)
    {
        if (root == nullptr)
        {
            return ret_vec;
        }
        else
        {
            postOrder(root->left, ret_vec);
            postOrder(root->right, ret_vec);
            ret_vec.push_back(root->val);
            return ret_vec;
        }
    }
    vector<int> postorderTraversal(TreeNode* root) {
        std::vector<int> ret_vec;
        postOrder(root, ret_vec);
        return ret_vec;
    }
};

 

posted @ 2023-06-17 20:15  Wangtn  阅读(16)  评论(0编辑  收藏  举报