寻找二叉树最深叶节点的最近公共祖先

给定一个由 N 个节点组成的二叉树,这些节点的值来自范围 [1, N] 且互不相同,我们的任务是找到该二叉树最深叶节点最近公共祖先

示例:

> 输入:

>

>

>

>

>

> !image

>

>

>

>

>

> 输出: 1

> 解释: 树的最深叶节点是 {8, 9, 10}。这些节点的最近公共祖先是 1。

>

>

>

>

>

> 输入:

>

>

>

>

>

> !image

>

>

>

>

>

> 输出: 6

方法: 我们可以通过先找到树的最大深度,然后执行深度优先搜索遍历(DFS Traversal)寻找最近公共祖先,从而解决给定的问题。请按照以下步骤解决问题:

  • 找到二叉树的最大深度并将其存储在一个变量中,比如 depth
  • 声明一个函数,比如 DFS(root, curr) ,用于查找处于 depth 层级的节点的最长公共子序列(LCS):
  • 如果 root NULL,则返回 NULL
  • 如果 curr 的值等于 depth,则返回当前节点。
  • 递归调用左子树,即 DFS(root->left, curr + 1),并将返回值存储在一个变量中,比如 left
  • 递归调用右子树,即 DFS(root->right, curr + 1) ,并将返回值存储在一个变量中,比如 right
  • 如果 left right 的值均非空,则返回当前节点,因为当前节点就是最近公共祖先。
  • 如果 left 非空,则返回 left。否则,返回 right
  • 完成上述步骤后,打印函数调用 DFS(root, 0) 返回的值。

下面是上述方法的实现:

C++


CODEBLOCK_c1547e28

Java


// Java program for the above approach

// Node of a Binary Tree

class Node

{

Node left = null;

Node right = null;

int data;

Node(int data)

{

this.data = data;

}

}

class GFG{

// Function to find the depth

// of the Binary Tree

public static int findDepth(Node root)

{

// If root is not null

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/35291.html
点赞
0.00 平均评分 (0% 分数) - 0