算法总结 - 树 - 递归

Recursion (递归)

1. 普通二叉树

Lowest Common Ancestor of a Binary Tree

236. Lowest Common Ancestor of a Binary Tree
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.

According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes p and q as the lowest node in T that has both p and q as descendants (where we allow a node to be a descendant of itself).”

Given the following binary tree: root = [3,5,1,6,2,0,8,null,null,7,4]

Example 1:

Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
Output: 3
Explanation: The LCA of nodes 5 and 1 is 3.
Example 2:

Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
Output: 5
Explanation: The LCA of nodes 5 and 4 is 5, since a node can be a descendant of itself according to the LCA definition.


题目大意
给一个二叉树和两个节点,找他们最低的的公共祖先(离两个节点最近的公共父节点)。

解题思路
递归解法:

  1. 递归变量: 根节点,第一个子节点,第二个子节点

  2. 处理当前节点:
    a. 如果当前节点为null,等于第一个子节点,等于第二个节点,那么返回当前节点。
    b. 如果左子树公共节点与右子树公共节点都为null,证明公共节点为根节点即当前节点,否则那个公共节点不为空就返回哪个。

  3. 处理子节点:从左右子树分别找跟定两个子节点的最低公共节点。

复杂度
TC: O(n) SC: O(lgn)

public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
   
    if (root == null || root == p || root == q) {
   
        return root;
    }
    TreeNode left = lowestCommonAncestor(root.left, p, q);
    TreeNode right = lowestCommonAncestor(root.right, p, q);
    if (left != null && right != null) {
   
        return root;
    } 
    return left != null ? left : right;
}

相似题目
116. Populating Next Right Pointers in Each Node
814. Binary Tree Pruning
701. Insert into a Binary Search Tree
111. Minimum Depth of Binary Tree
110. Balanced Binary Tree
572. Subtree of Another Tree
101. Symmetric Tree
563. Binary Tree Tilt
100. Same Tree
226. Invert Binary Tree
617. Merge Two Binary Trees


Boundary of Binary Tree

545. Boundary of Binary Tree
Given a binary tree, return the values of its boundary in anti-clockwise direction starting from root. Boundary includes left boundary, leaves, and right boundary in order without duplicate nodes.

Left boundary is defined as the path from root to the left-most node. Right boundary is defined as the path from root to the right-most node. If the root doesn’t have left subtree or right subtree, then the root itself is left boundary or right boundary. Note this definition

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值