二叉树的最近公共祖先&类型转化

二叉树的最近公共祖先

236. 二叉树的最近公共祖先

总体思想是:对二叉树进行先序遍历,当遍历到两个子节点的时候直接返回节点,同时也要处理空节点。一共分三种情况:

  • 如果在root节点的左边找到了一个 右边找到了一个 那就说明root就是最近的公共祖先。
  • 如果只有左子树的结果非空(即 left 不为空),这说明 p 和 q 都在左子树中或者其中一个是左子树中的节点,且另一个节点的祖先也在左子树中,那么就返回左子树找到的结果 left。
  • 如果左子树的结果为空,那就返回右子树的结果 right ,因为此时 p 和 q 要么都在右子树中,要么其中一个是右子树中的节点且另一个节点的祖先也在右子树中。
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if (!root || root == p || root == q)return root;
        TreeNode* left = lowestCommonAncestor(root->left, p, q);
        TreeNode* right = lowestCommonAncestor(root->right, p, q);
        if (left && right)return root;
        if (left)return left;
        return right;
    }

什么是隐式类型转换?隐式类型转换可能带来哪些问题?

        隐式类型转换也可以叫自动类型转换,是指编译器自动进行的将一种类型的变量转换成另外一种类型,不用程序员明确表明转换操作。

一般有以下几种情况会发生隐式类型转换:

  • 算数运算:当不同的类型进行算数运算时,编译器会自动将较小的类型提升为较大的类型,比如double和int运算,int就会自动被提升为double
  • 函数调用:当形参和实参的类型不匹配时,编译器会尝试进行自动类型转换,使函数能被正常调用
  • 赋值操作:当变量的类型和赋值的类型不匹配时,编译器会尝试自动类型转换

带来的问题:精度丢失、类型不匹配导致的逻辑错误、性能问题、难以发现的程序错误

显式类型转换(如强制类型转换)有哪些风险?

        显式类型转换(也叫做强制类型转换)是指程序员明确要求将一种类型的值转换为另一种类型。在 C++ 中,显式类型转换使用强制类型转换运算符 static_castdynamic_castconst_cast reinterpret_cast

        风险:丢失精度、类型不匹配引起的问题、破坏类型安全、代码可读性和维护性差(看不懂代码)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值