zoukankan      html  css  js  c++  java
  • [面试] 二叉树两结点的最低共同父结点

    题目:二叉树的结点定义如下:

    struct TreeNode

    {

        int m_nvalue;

        TreeNode* m_pLeft;

        TreeNode* m_pRight;

    };

    输入二叉树中的两个结点,输出这两个结点在数中最低的共同父结点。

    递归版本:空间O(1),时间O(n)

     1 struct Node
     2 {
     3     int val;
     4     Node *left;
     5     Node *right;
     6     Node():left(NULL), right(NULL){}
     7 };
     8 
     9 Node *findFather(Node *root, Node *node1, Node *node2, bool &node1Find, bool &node2Find)
    10 {
    11     if (root == NULL)
    12         return NULL;
    13 
    14     bool leftNode1Find = false, leftNode2Find = false;
    15     Node *leftNode = findFather(root->left, node1, node2, leftNode1Find, leftNode2Find);
    16     if (leftNode != NULL)
    17         return leftNode;
    18 
    19     bool rightNode1Find = false, rightNode2Find = false;
    20     Node *rightNode = findFather(root->right, node1, node2, rightNode1Find, rightNode2Find);
    21     if (rightNode != NULL)
    22         return rightNode;
    23 
    24     node1Find = leftNode1Find || rightNode1Find;
    25     node2Find = leftNode2Find || rightNode2Find;
    26 
    27     if (node1Find && node2Find)
    28         return root;
    29 
    30     if (root == node1)
    31         node1Find = true;
    32 
    33     if (root == node2)
    34         node2Find = true;
    35 
    36     return NULL;
    37 }

     

  • 相关阅读:
    迭代器、生成器、装饰器(转)
    Python小数据池
    接阿里云oss有感
    VSCode快捷键
    前端跨域调请求 nginx反向代理
    Git生成密钥
    【westorm系列之二】配置格式化
    钉钉安卓端无法渲染数据
    express 写接口
    js正则匹配身份证号 有坑
  • 原文地址:https://www.cnblogs.com/chkkch/p/2788795.html
Copyright © 2011-2022 走看看