有一个二叉树,现在怀疑它有一个结点有2个父节点,请写出一个函数来判断该二叉树是否存在一个节点含有2个父节点。如果存在,返回true,否则返回false。
2014-10-10 19:59
1366 查看
可以这样,要检测一个结点是否有两个父亲时,先把从该结点开始的结点与原树分离,分成两部分,然后再从原树再查找该结点,如果找到那就是有两个结点,如果没有则递归查找。</span>
struct Node{ Node *pLeft; Node *pRight; int Data; }; //pTree为要查找的树,pParent为pNode的父结点,pNode为根时pParent 为NULL //若pTree 中存在具有两个父结点的点返回真,否则返回假 bool CheckTwoParent( Node *pTree, Node *pParent, Node *pNode) { Node *pTemp = NULL; bool result; if ( pNode == NULL ) return false; if ( pParent == NULL ) //根结点 { if ( pTree->pLeft != NULL ) { pTree->pLeft = NULL; result = FindNode( pTree, pNode ); //FindNode为在pTree树中查看PNode结点存在与否,若存在返回true,否则返回false,这个很简单,可以自己写 pTree->Left = pNode; if ( result ) return true; } if ( pTree->pRight != NULL ) { pTree->pRight = NULL; result = FindNode( pTree, pNode ); pTree->pRight = pNode; if ( result ) return true; } if ( CheckTwoParent( pTree, pNode, pNode->pLeft) ) return true; return CheckTwoParent( pTree, pNode, pNode->pRight); } else { if ( pParent->pLeft == pNode ) //若当前结点为左孩子 { pParent->pLeft = NULL; result = FindNode( pTree, pNode ); //FindNode为在pTree树中查看PNode结点存在与否,若存在返回true,否则返回false,这个很简单,可以自己写 pTree->Left = pNode; if ( result ) return true; } else { pParent->pRight = NULL; result = FindNode( pTree, pNode ); //FindNode为在pTree树中查看PNode结点存在与否,若存在返回true,否则返回false,这个很简单,可以自己写 pTree->pRight = pNode; if ( result ) return true; } if ( CheckTwoParent( pTree, pNode, pNode->pLeft) ) return true; return CheckTwoParent( pTree, pNode, pNode->pRight); } }
相关文章推荐
- 有一个二叉树,现在怀疑它有一个结点有2个父节点,请写出一个函数来判断该二叉树是否存在一个节点含有2个父节点。如果存在,返回true,否则返回false。
- 编制一个返回值为bool型的函数isPrimer(),用于判断参数是否为素数(是素数返回true,否则false),自编main函数用于测试
- 输入一个年份判断是否为闰年,是就返回TRUE,否则就返回FALSE.cpp
- headers_sent() 函数检查 HTTP 标头是否已被发送以及在哪里被发送。 如果报头已发送,则返回 true,否则返回 false。
- 判断一个字符串是否是首字母大写,其余字母小写,是则输出true,否则输出false
- php 在linux 用file_exists() 函数判断 另外一台服务器映射过来的文件是否存在 总是返回false
- strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
- 判断一个链表是否有环,如果有环返回环开始的结点指针
- 如何高效的判断数组中是否存在至少两个相同的数值,存在返回true,不存在返回false
- 2个二叉树A、B,树的每个节点上都有一个整数值。如何判断A与B是否其中一个是另一个的子树?
- 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bccced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中
- 写一个函数,检查字符是否是整数,如果是,返回其整数值(最好用四句代码写出)
- 判断是否含有中文,包含返回true,不包含返回false
- 删除顺序表L中最小元素结点,并通过引用型参数value返回其值 如果删除成功,返回TRUE,否则,返回false
- python判断是否可以只插一个字符,让字符串变成回文,返回true/false
- 在一个类中编写一个方法,这个方法搜索一个字符数组中是否存在某个字符,如果存在,则返回这个字符在字符数组中第一次出现的位置(序号从0开始计算),否则,返回-1。要搜索的字符数组和字符都以参数形式传递传递
- 在主函数中提示用户输入用户名和密码。另写一方法来判断用户输入是否正确。该方法分别返回一个bool类型的登录结果和和一个string类型的登录信息。如登录成功,返回true及“登录成功”,若登录失败则返回false及“用户名错误”或“密码错误”(使用out参数)
- Java代码 给出一个二叉树和一个数,判断该二叉树是否存在一个从根节点到叶节点的和与给出的数相同
- 微软2 写一个函数,检查字符是否是整数,如果是,返回其整数值。
- 通过文件锁实现,程序开始运行时,先判断文件是否存在,若存在则表明该程序已经在运行了,如果不存在就用open函数创建该文件,程序退出时关闭文件并删除文件