# 二叉树的递归遍历

2和5

8和7

image.png

## code

```/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(root ==NULL)
{
return root;
}

if(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;
}

return left ?left:right;
}
};```

## 题目2 LeetCode 110. Balanced Binary Tree

### 特点2 从上到下，依赖当前root节点判断

#### 1 翻转等价二叉树

• 选择任意节点，然后交换它的左子树和右子树
• 左子树和右子树是否继续交换呢？ 是否选择了任意节点？ 等价tree和翻转等级tree的结合

#### code

```执行用时 : 12 ms
/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool flipEquiv(TreeNode* root1, TreeNode* root2) {

if(root1 ==NULL && root2 ==NULL)
{
return true;
}

if((root1!=NULL && root2==NULL) ||(root2!=NULL &&root1==NULL)||root1->val !=root2->val)
{
return false;
}

/**
if(root1->left !=root2->right ||root1->right !=root2->left)
{
return false;
}**/

return  flipEquiv(root1->left,root2->right) && flipEquiv(root1->right,root2->left) ||  flipEquiv(root1->left,root2->left) && flipEquiv(root1->right,root2->right);
}

};

func flipEquiv(root1, root2 *TreeNode) bool {
if root1 == nil && root2 == nil {
return true
}

if (root1 != nil && root2 == nil) ||
(root1 == nil && root2 != nil) ||
root1.Val != root2.Val {
return false
}

if (flipEquiv(root1.Left, root2.Left) && flipEquiv(root1.Right, root2.Right)) ||
(flipEquiv(root1.Left, root2.Right) && flipEquiv(root1.Right, root2.Left)) {
return true
}

return false
}```

• root保持不变
• 左右子树交换
• 重复步骤1和2

## code

```class Solution {
public:
TreeNode* invertTree(TreeNode* root) {

if(root == NULL)
{
return root;
}
//!!!!!
TreeNode *temp=root->left;
root->left =root->right;
root->right=temp;

invertTree(root->left);
invertTree(root->right);

return root;
}
};```

0 条评论

• ### 漫谈递归-链表合并

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

• ### 958. 二叉树的完全性检验

输入：[1,2,3,4,5,null,7] 输出：false 解释：值为 7 的结点没有尽可能靠向左侧

• ### 单链表中头节点作用(深入理解)

今天QQ群里有人咨询一个问题 例如单链表中头节点作用 然后联想到做项目中解决core一个问题 虽然每天都在吃饭睡觉打豆豆，啥框架业务都不懂 解决了这一个...

• ### PWA - 令人惊奇的web用户体验新方法

install 事件回调中有两个方法： * event.waitUntil()：传入一个 Promise 为参数，等到该 Promise 为 resolve 状...

• ### 卷积神经网络学习路线（三）| 盘点不同类型的池化层、1*1卷积的作用和卷积核是否一定越大越好？

这是卷积神经网络学习路线的第三篇，这一篇开始盘点一下池化层的不同类型和1*1卷积的作用。

• ### 卷积神经网络（CNN）

CNN，即卷积神经网络，主要用于图像识别，分类。这篇卷积神经网络是前面介绍的多层神经网络的进一步深入，它将深度学习的思想引入到了神经网络当中，通...

• ### 卷积操作转化成矩阵乘法

平常都是无脑使用Pytorch提供的nn.Conv2d方法，但是并不关心具体该如何实现，原来是把卷积操作转化成矩阵乘法，而不是真的通过滑动卷积核来做卷积，下面做...

• ### InceptionV3 网络模型

GoogLeNet inceptionV1 到 V4，一直都在逐步改进，本文主要是阅读 V3 的论文学习总结。

• ### 深度学习论文笔记（六）--- FCN-2015年（Fully Convolutional Networks for Semantic Segmentation）

深度学习论文笔记（六）--- FCN 全连接网络 FullyConvolutional Networks for Semantic Segmentation ...

• ### 一些常被忽略又很有用的小技巧

手画肯定不可能了，但以为要安装什么小工具才能拧出来。结果是一两行命令的事情。 window系统：打开cmd.exe界面，输入如下指令：