西安蓝海网站建设,营销型网站制作的方法,dedecms网站制作教程,深圳网站建设公司地址二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为#xff1a;“对于有根树 T 的两个节点 p、q#xff0c;最近公共祖先表示为一个节点 x#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大#xff08;一…二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为“对于有根树 T 的两个节点 p、q最近公共祖先表示为一个节点 x满足 x 是 p、q 的祖先且 x 的深度尽可能大一个节点也可以是它自己的祖先。”
示例 1
输入root [3,5,1,6,2,0,8,null,null,7,4], p 5, q 1 输出3 解释节点 5 和节点 1 的最近公共祖先是节点 3 。 示例 2
输入root [3,5,1,6,2,0,8,null,null,7,4], p 5, q 4 输出5 解释节点 5 和节点 4 的最近公共祖先是节点 5 。因为根据定义最近公共祖先节点可以为节点本身。 示例 3
输入root [1,2], p 1, q 2 输出1
提示
树中节点数目在范围 [2, 105] 内。 -109 Node.val 109 所有 Node.val 互不相同 。 p ! q p 和 q 均存在于给定的二叉树中。
思路
后序遍历父节点会接收到子节点问否是pq并把这个状态向上传递直到满足条件
返回值 节点参数 输入节点pq
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q)终止条件 节点p 或 q 或 为空 if(rootp || rootq || root NULL) return root;单次递归 采用后序左右中 左操作设立参数left接收左子树是否有pq有的话left为p或q 右操作设立参数right接收右子树是否有pq有的话right为p或q TreeNode* leftlowestCommonAncestor(root-left,p,q);TreeNode* rightlowestCommonAncestor(root-right,p,q);中操作将本递归返回的参数进行判断 左有q右有p 左有p右有q 上面一条成立则此中节点为父节点 if(leftNULL right!NULL) return right;if(left!NULL rightNULL) return left;if(left!NULL right!NULL) return root;return NULL;left和right的取值是靠终止条件返回没找到p或qleft和right就会一直是NULL if(rootp || rootq || root NULL) return root;