试编写算法输出二叉树中任一非空结点值的双亲结点的值,如果没有双亲则输出0,从键盘获得数据,c++实现
时间: 2023-12-03 21:44:51 浏览: 82
下面给出c++实现的算法:
```cpp
#include<iostream>
using namespace std;
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x):val(x),left(nullptr),right(nullptr){};
};
void findParent(TreeNode* root,int target){
if(root==nullptr) return; // 如果根结点为空,直接返回
if(root->left!=nullptr&&root->left->val==target){ // 如果左孩子结点的值等于目标值
cout<<root->val<<endl; // 输出双亲结点的值
return;
}
if(root->right!=nullptr&&root->right->val==target){ // 如果右孩子结点的值等于目标值
cout<<root->val<<endl; // 输出双亲结点的值
return;
}
findParent(root->left,target); // 递归查找左子树
findParent(root->right,target); // 递归查找右子树
}
int main(){
// 构建二叉树
TreeNode* root=new TreeNode(1);
root->left=new TreeNode(2);
root->right=new TreeNode(3);
root->left->left=new TreeNode(4);
root->left->right=new TreeNode(5);
root->right->left=new TreeNode(6);
root->right->right=new TreeNode(7);
int target;
cout<<"请输入目标结点的值:";
cin>>target;
findParent(root,target); // 查找目标结点的双亲结点
return 0;
}
```
该算法的时间复杂度为$O(n)$,其中$n$为二叉树中结点的个数。
阅读全文