ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1372 二叉树中的最长交错路径

2021-01-23 14:30:54  阅读:241  来源: 互联网

标签:结点 right res depth 1372 二叉树 交错 null root


题目描述:
给你一棵以 root 为根的二叉树,二叉树中的交错路径定义如下:
选择二叉树中 任意 节点和一个方向(左或者右)。
如果前进方向为右,那么移动到当前节点的的右子节点,否则移动到它的左子节点。
改变前进方向:左变右或者右变左。
重复第二步和第三步,直到你在树中无法继续移动。
交错路径的长度定义为:访问过的节点数目 - 1(单个节点的路径长度为 0 )。
请你返回给定树中最长 交错路径 的长度。

示例 1:
在这里插入图片描述
输入:root = [1,null,1,1,1,null,null,1,1,null,1,null,null,null,1,null,1]
输出:3
解释:蓝色节点为树中最长交错路径(右 -> 左 -> 右)。

示例 2:
在这里插入图片描述
输入:root = [1,1,1,null,1,null,null,1,1,null,1]
输出:4
解释:蓝色节点为树中最长交错路径(左 -> 右 -> 左 -> 右)。

示例 3:
输入:root = [1]
输出:0

提示:
每棵树最多有 50000 个节点。
每个节点的值在 [1, 100] 之间。

方法1:
主要思路:解题汇总链接
(1)后序遍历;
(2)对于每个结点,标识当前结点是左结点还是右结点;
(3)若当前结点是右结点,则需要使用一个变量保存该节点的右子树下的深度,同时返回当前结点的左子树的深度加1作为父节点的深度;
(4)对于当前结点是左结点,类似;
(5)则对于根节点,在确定左子树或右子树下的最大深度之后,再和之前遍历过程中保存的所有子节点中可能的最大深度比较,返回最大深度;

/**
 * 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:
	//变量 is_right 标识当前结点是左结点还是右结点,res存储遍历过程中,可能出现的最大深度
    int find_depth(TreeNode*root,bool is_right,int&res){
        if(root==NULL){
            return 0;
        }
        //找出左右子树的交叉深度
        int right_depth=find_depth(root->right,true,res);
        int left_depth=find_depth(root->left,false,res);
        if(is_right){//若当前结点是右结点
            res=max(res,right_depth);//保存当前结点的右子树的最大交叉深度
            return left_depth+1;//返回父节点的交叉深度,既需要和当前结点的左子树配合
        }
        else{
            res=max(res,left_depth);
            return right_depth+1;
        }
    }
    int longestZigZag(TreeNode* root) {
        if(root==NULL||(root->left==NULL&&root->right==NULL)){//处理特殊的情形
            return 0;
        }
        int res=0;//保存子树中的最大深度
        //左右子树的交叉深度
        int left_depth=find_depth(root->left,false,res);
        int right_depth=find_depth(root->right,true,res);
        return max(res,max(left_depth,right_depth));//返回最大值
    }
};

标签:结点,right,res,depth,1372,二叉树,交错,null,root
来源: https://blog.csdn.net/weixin_44171872/article/details/113044649

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有