tomoebzk

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

day14补

day14主要使用递归法遍历解决一些二叉树的简单问题,按照递归三个步骤进行思考,返回值通过答案的类型进行考虑,终止条件需要结合题意进行,单层递归逻辑可以通过画图进行确定。

leetcode 226反转二叉树

本题前序遍历和后序遍历都可,如果采用中序遍历,在遍历完左子树后经过反转,左子树变为右子树,接下来遍历右子树相当于又遍历了一遍已经遍历过的前左子树,因此不能采用中序遍历


    void Traversal(TreeNode*root,vector<int>vec)
    {
        if(root==nullptr)return ;
        vec.push_back(root->val);
        swap(root->left,root->right);
        Traversal(root->left,vec);
        Traversal(root->right,vec);

    }

leetcode 101 对称二叉树

判断二叉树是否对称,就是看左右两棵子树的外侧、里侧是否分别相等,由于需要将两个子树高度返回给根节点,因此需要先遍历左右子节点,采用后序遍历。由于需要分别对比外侧与里侧的值,因此左子树采用的是左右中,而右子树相应的采用右左中。

bool compare(TreeNode*left,TreeNode*right)
    {
        if(left==nullptr&&right!=nullptr)return false;
        else if(left!=nullptr&&right==nullptr)return false;
        else if(left==nullptr&&right==nullptr)return true;
        else if(left->val!=right->val)return false;

        bool outside=compare(left->left,right->right);//左子树:左 || 右子树:右
        bool inside=compare(left->right,right->left);//左子树:右 || 右子树:左
        bool isSame=outside&&inside;//左子树:中 || 右子树:中    处理逻辑
        return isSame;
    }

leetcode 104 二叉树的最大深度

采用后序遍历,将两个子树最大值加1就是根节点的深度

int getHeight(TreeNode*root)
    {
        if(root==nullptr)return 0;
        int leftHeight=getHeight(root->left);
        int rightHeight=getHeight(root->right);
        int height=1+max(leftHeight,rightHeight);
        return height;

    }

leetcode 111 二叉树的最小深度

采用后序遍历,将两个子树最小高度加1,但是需要考虑到题目中对于叶子节点的说明,叶子节点是指没有子节点的节点,因此只有左右其中一个节点的情况不能算,因此需要判断排除。

int getHeight(TreeNode*root)
    {
        if(root==nullptr)return 0;
        int leftH=getHeight(root->left);
        int rightH=getHeight(root->right);
        
        if(root->left==nullptr&&root->right!=nullptr)
        {
            return 1+rightH;
        }
        else if(root->left!=nullptr&&root->right==nullptr)
        {
            return 1+leftH;
        }

        return 1+min(leftH,rightH);


    }
posted on 2026-03-03 10:58  broderk  阅读(19)  评论(0)    收藏  举报