gpt4 book ai didi

binary-tree - 如何高效地找到二叉树中给定节点(或项)的镜像节点

转载 作者:行者123 更新时间:2023-12-04 02:48:05 25 4
gpt4 key购买 nike

一直在思考这个问题,一直没有找到好的、高效的解决方案。

如何在二叉树中找到给定节点(或项)的镜像节点?

// Node definition
struct _Node {
char data;
struct _Node* left;
struct _Node* right;
} Node;

// Assumption:
// "given" is guaranteed in the binary tree ("root" which is not NULL)
Node* FindMirrorNode(Node* root, Node* given)
{
// Implementation here
}

// OR:

// Assumption:
// in the binary tree ("root"), there is no repeated items, which mean in each node the char data is unique;
// The char "given" is guaranteed in the binary tree.
char FindMirrorNodeData(Node* root, char given)
{
// Implementation here
}

注意:我不是在问如何找到给定树的镜像树:-)

For example, considering the tree below
A
/ \
B C
/ / \
D E F
\ / \
G H I

The mirror node of 'D' is node 'F'; while the mirror node of 'G' is NULL.

谢谢。

最佳答案

我已经用 char 为函数编写了一个解决方案。是 FindMirrorNode(r, n) == FindMirrorNodeData(r, n->data) 吗?

您必须遍历整个树以搜索给定数据,同时将镜像节点保留在堆栈中。这是一个非常简单的解决方案,仍然非常有效。如果您愿意,可以将尾调用转换为 while

static Node* FindMirrorNodeRec(char given, Node* left, Node* right)
{
// if either node is NULL then there is no mirror node
if (left == NULL || right == NULL)
return NULL;
// check the current candidates
if (given == left->data)
return right;
if (given == right->data)
return left;
// try recursively
// (first external then internal nodes)
Node* res = FindMirrorNodeRec(given, left->left, right->right);
if (res != NULL)
return res;
return FindMirrorNodeRec(given, left->right, right->left);
}

Node* FindMirrorNodeData(Node* root, char given)
{
if (root == NULL)
return NULL;
if (given == root->data)
return root;
// call the search function
return FindMirrorNodeRec(given, root->left, root->right);
}

关于binary-tree - 如何高效地找到二叉树中给定节点(或项)的镜像节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3175917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com