二叉树的一些基本算法

4

介绍

二叉树,英文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;
        }
    }
};