树
没有孩子的节点是叶子节点
树的高度是从下往上算的,叶子结点的高度是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; } };
无情的摸鱼机器