day15-二叉树2

1、翻转二叉树

递归的方法:交换左子树和右子树,挨个交换,还是要一层一层递归

1.确定递归函数的参数和返回值

int invertTree(TreeNode* root)

2.确定结束条件

if(node==NULL) return root;

3.确定单层递归的逻辑

swap(root->left,root->right);

invertTree(root->left);

invertTree(root->right);

2、对称二叉树

1、思路,递归的方法不是讲两边都输出来然后对比,而是一个结点一个结点的比对,同时左子树的左孩子和右子树的右孩子做比较,左子树的右孩子与右子树的左孩子作比较,为什么要这么操作呢,因为对称的意思是在根节点上立一条对称轴,左右两边对应相等

2、三步走:

1.确定递归函数的参数和返回值

bool compare(TreeNode* left,TreeNode* right)

2.确定结束条件

现在就不是节点为空就停止,而是左空右空、左空右不空、左不空右空、左右不相等结束

// 首先排除空节点的情况
        if (left == NULL && right != NULL) return false;
        else if (left != NULL && right == NULL) return false;
        else if (left == NULL && right == NULL) return true;
        // 排除了空节点,再排除数值不相同的情况
        else if (left->val != right->val) return false;

3.确定单层递归的逻辑

外层:左子树的左儿子等于右子树的右儿子

内层:左子树的右儿子等于右子树的左儿子

确定:要求上面两个都为真才可以

// 此时就是:左右节点都不为空,且数值相同的情况
        // 此时才做递归,做下一层的判断
        bool outside = compare(left->left, right->right);   // 左子树:左、 右子树:右
        bool inside = compare(left->right, right->left);    // 左子树:右、 右子树:左
        bool isSame = outside && inside;                    // 左子树:中、 右子树:中 (逻辑处理)
        return isSame;

完全对称的逻辑很重要,判断左右值的时候可能会用上;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值