二叉树的一些基本算法
介绍
二叉树,英文Binary Tree,是每个节点最多只有两个分支的树结构。其中没有子节点的为叶子,其余为节点。
遍历
二叉树的遍历方法有:
前序遍历:根结点 ---> 左子树 ---> 右子树
中序遍历:左子树---> 根结点 ---> 右子树
后序遍历:左子树 ---> 右子树 ---> 根结点
算法
二叉树的算法中,递归的方法是相比较下比较简单的了,时间复杂度和空间复杂度。而队列和栈的方法比较难理解,但是在效率上可能比递归好很多。
基础的递归算法
这里展示一下力扣里最最简单的二叉树算法,分别是相同的树和对称的树
class Solution {
public:
bool isSameTree(TreeNode* p, TreeNode* q) {
if(p==nullptr && q==nullptr){
return true;
}else if(p && q){
if(p->val != q->val){
return false;
}
return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
}else{
return false;
}
}
};class Solution {
public:
bool isSymmetric(TreeNode* root) {
return func(root->left,root->right);
}
bool func(TreeNode* left, TreeNode* right){
if(!left && !right){
return true;
}else if(left && right){
if(left->val != right->val){
return false;
}
return func(left->left,right->right)&&func(left->right,right->left);
}else{
return false;
}
}
};