日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二叉树两个结点的最低公共父结点 【微软面试100题 第七十五题】

發布時間:2025/3/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二叉树两个结点的最低公共父结点 【微软面试100题 第七十五题】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目要求:

  輸入二叉樹中的兩個結點,輸出這兩個及誒單在數中最低的共同父結點。

題目分析:

  還有一種情況:如果輸入的兩個結點中有一個或兩個結點不在二叉樹中,則輸出沒有共同父結點;

  因此,可以在程序中定義一個flag=0,找到一個點之后flag就加1,最后判斷的時候,如果flag=2,則說明在二叉樹中找到了輸入的兩個結點。

代碼實現:

  

#include <iostream> #include <stack>using namespace std;typedef struct BinaryTree {struct BinaryTree *left,*right;int data; }BinaryTree;int flag = 0; void initTree(BinaryTree **p,BinaryTree **a,BinaryTree **b); BinaryTree *GetLowestParent(BinaryTree *root,BinaryTree *X,BinaryTree *Y);int main(void) {BinaryTree *root,*a,*b;initTree(&root,&a,&b);BinaryTree *parent = GetLowestParent(root,a,b);if(parent && flag==2)cout << "最低公共父結點的值為:" << parent->data << endl;elsecout << "沒有最低公共父結點!" << endl;a = new BinaryTree;flag = 0;parent = GetLowestParent(root,a,b);if(parent && flag==2)cout << "最低公共父結點的值為:" << parent->data << endl;elsecout << "沒有最低公共父結點!" << endl;return 0; } // 10 // / \ // 5 12 // / \ // 4 7 void initTree(BinaryTree **p,BinaryTree **a,BinaryTree **b) {*p = new BinaryTree;(*p)->data = 10;BinaryTree *tmpNode = new BinaryTree;tmpNode->data = 5;(*p)->left = tmpNode;tmpNode = new BinaryTree;*b = tmpNode;tmpNode->data = 12;(*p)->right = tmpNode;tmpNode->left = NULL;tmpNode->right = NULL;BinaryTree *currentNode = (*p)->left;tmpNode = new BinaryTree;*a = tmpNode;tmpNode->data = 4;currentNode->left = tmpNode;tmpNode->left = NULL;tmpNode->right = NULL;tmpNode = new BinaryTree;tmpNode->data = 7;currentNode->right = tmpNode;tmpNode->left = NULL;tmpNode->right = NULL;cout << "二叉樹為:" <<endl;cout << " " << 10<<endl;cout << " " <<"/" << " "<< "\\" <<endl;cout << " " << 5 << " " << 12 << endl;cout << " " <<"/" << " "<< "\\" <<endl;cout << 4 << " " << 7 << endl; } BinaryTree *GetLowestParent(BinaryTree *root,BinaryTree *X,BinaryTree *Y) {if(root == NULL)return NULL;if(X==root || Y==root){flag++;return root;}BinaryTree *left = GetLowestParent(root->left,X,Y);BinaryTree *right = GetLowestParent(root->right,X,Y);if(left==NULL && right==NULL)return NULL;else if(left==NULL)return right;else if(right==NULL)return left;elsereturn root; }

?

轉載于:https://www.cnblogs.com/tractorman/p/4116437.html

總結

以上是生活随笔為你收集整理的二叉树两个结点的最低公共父结点 【微软面试100题 第七十五题】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。