二叉树的定义
1. 二叉树种类:
1.1 空的二叉树
1.2 只有根结点的二叉树
1.3 只有左子树或者右子树的二叉树
1.4 左右子树都存在的时候:
(1)满二叉树
(2)完全二叉树:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2 ( h − 1 ) 2^(h-1) 2(h−1) 个节点。
2. 遍历方式
2.1前序遍历(根在前面)
2.2中序遍历(根在中间)
2.3后序遍历(根在后面)
3.C++代码
struct TreeNode //链式储存二叉树
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {
}
};
二叉树之递归遍历
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:
void Traversal(TreeNode *cur,vector<int> &vec)
{
if(cur==nullptr)
{
return;//相当于中断,意思是只要cur=null,就退出Traversal函数
}
vec.push_back(cur->val);//中
Traversal(cur->left,vec);
Traversal(cur->right,vec);
}
vector<int> preorderTraversal(TreeNode* root)
{
vector<int> vec;
Traversal(root,vec);
return vec;
}
};
2.中序遍历
题目 难度:简单
/**
* 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 Trav