Posted Wangtn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树相关的知识,希望对你有一定的参考价值。

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

树的高度是从下往上算的,叶子结点的高度是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;
    
;

 

以上是关于树的主要内容,如果未能解决你的问题,请参考以下文章

从B树B+树B*树谈到R 树

Trie树(字典树)

从B树B+树B*树谈到R 树

转B树B-树B+树B*树红黑树 二叉排序树trie树Double Array 字典查找树简介

B树B-树B+树B*树

#树# #线段树#