zoukankan      html  css  js  c++  java
  • 7. 最近公共祖先

    题目:

    有一颗树,给定树中任意两个结点,计算出这两个结点的最近公共祖先(查看定义)。
    
    树结点的定义为(请不要在代码中再次定义该结构):
    
    C/C++
    struct TreeNode {
        TreeNode *parent;
    }
    Java
    public class TreeNode {
        public TreeNode parent;
    }
    树结点只包含父结点指针(父结点指针为null表示该结点为根结点),该题存在空间复杂度O(1),时间复杂度低于O(n)的简单算法。
    View Code

    代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace LCA
    {
        class Program
        {
            static void Main(string[] args)
            {
            }
    
            public int GetHeight(TreeNode treeNode)
            {
                int height = 1;
                while (treeNode.parent!=null)
                {
                    height++;
                    treeNode = treeNode.parent;
                }
                return height;
            }
    
            public TreeNode GetLCA(TreeNode node1, TreeNode node2)
            {
                int height1 = GetHeight(node1);
                int height2 = GetHeight(node2);
                while (height1>height2)
                {
                    node1 = node1.parent;
                    height1--;
                }
                while (height1<height2)
                {
                    node2 = node2.parent;
                    height2--;
                }
                while (node1!=node2)
                {
                    node1 = node1.parent;
                    node2 = node2.parent;
                }
                return node1;
            }
    
        }
    
        
    
        public struct TreeNode
        {
            public TreeNode parent;
        }
    }
    View Code
  • 相关阅读:
    MVC 中301永久重定向
    String
    redis key设置过期时间
    hbase java 增加列族
    hbase 物理存储
    java 类图
    SSH hql中文查询时乱码快速解决
    json和pickle的序列化与反序列化
    python之生成器与迭代器
    安装traits库心得
  • 原文地址:https://www.cnblogs.com/Ligeance/p/3511608.html
Copyright © 2011-2022 走看看