面试题:判断一个节点是否在一棵二叉树中
来源:互联网 发布:2017java不好找工作了 编辑:程序博客网 时间:2024/06/09 23:59
题目:判断一个节点是否在一棵二叉树中
结点定义如下
struct BinaryTree{ BinaryTree(char data) :_pLeft(NULL) , _pRight(NULL) , _data(data) {} BinaryTree *_pLeft; BinaryTree *_pRight; char _data;};
首先附上创建树代码
void CreateBinaryTree(BinaryTree *&pRoot, char *str,size_t size, size_t &index){ if (index < size && str[index] != '#') { pRoot = new BinaryTree(str[index]); CreateBinaryTree(pRoot->_pLeft, str, size, ++index); CreateBinaryTree(pRoot->_pRight, str, size, ++index); }}
思路:判断当前结点与查找的结点是否相等,如果不相等寻找左子树,继而寻找右子树,这样用递归很容易实现
- 代码实现
bool IsNodeInTree(BinaryTree *pRoot,BinaryTree *pNode){ if (NULL == pRoot || NULL == pNode) return false; if (pRoot->_data == pNode->_data) return true; if (IsNodeInTree(pRoot->_pLeft, pNode) || IsNodeInTree(pRoot->_pRight, pNode)) return true; return false;}
- 测试用例
void funtest(){ BinaryTree *pRoot; char *str = "abdh###e##cf##g#i"; size_t index = 0; CreateBinaryTree(pRoot, str, strlen(str), index); BinaryTree *node = pRoot->_pLeft; cout << node->_data << " "; bool ret = IsNodeInTree(pRoot, node); cout << ret << endl; node = pRoot->_pLeft->_pLeft; cout << node->_data << " "; ret = IsNodeInTree(pRoot, node); cout << ret << endl; node = pRoot->_pLeft->_pLeft; cout << node->_data << " "; ret = IsNodeInTree(pRoot, node); cout << ret << endl; node = pRoot->_pLeft->_pRight; cout << node->_data << " "; ret = IsNodeInTree(pRoot, node); cout << ret << endl; node = pRoot->_pRight; cout << node->_data << " "; ret = IsNodeInTree(pRoot, node); cout << ret << endl; node = pRoot->_pRight->_pLeft; cout << node->_data << " "; ret = IsNodeInTree(pRoot, node); cout << ret << endl; node = pRoot->_pRight->_pRight; cout << node->_data << " "; ret = IsNodeInTree(pRoot, node); cout << ret << endl; node = pRoot->_pRight->_pRight->_pRight; cout << node->_data << " "; ret = IsNodeInTree(pRoot, node); cout << ret << endl; node = new BinaryTree('n'); cout << node->_data << " "; ret = IsNodeInTree(pRoot, node); cout << ret << endl; node = new BinaryTree('e'); cout << node->_data << " "; ret = IsNodeInTree(pRoot, node); cout << ret << endl; ret = IsNodeInTree(pRoot, NULL); cout << ret << endl;}
阅读全文
0 0
- 面试题:判断一个节点是否在一棵二叉树中
- 判断一个节点是否在一棵二叉树中
- 判断一个节点是否在一棵二叉树中
- 判断一个节点是否在一棵二叉树中
- 二叉树--判断一个节点是否在一棵二叉树中。
- 每日一题之判断一个节点是否在一棵二叉树中
- day14之判断一个节点是否在一棵二叉树中+判断一颗二叉树是是否是另一颗树的子树
- 【判断一个节点是否在一棵二叉树中】/【判断一颗二叉树是是否是另一颗树的子树】
- 判断一个节点是否在一棵二叉树中&判断一颗二叉树是是否是另一颗树的子树
- 判断一个节点是否在一棵二叉树中&&判断一颗二叉树是是否是另一颗树的子树
- 判断一个节点是否在二叉树中,判断tree2是否为tree1的子树
- /***/二叉树经典面试题之判断一棵二叉树是否是完全二叉树
- 判断一个节点是否在一棵二叉树中和判断一颗二叉树是否是另一颗树的子树——题集(十二)
- 【二叉树】树的子结构/判断一个节点是否在二叉树中
- 判断一个结点/一个树是否在一棵二叉树中
- 数据结构面试题/判断一棵二叉树是否是平衡二叉树
- 【面试题】判断一棵二叉树是否是完全二叉树
- day12之判断一棵二叉树是否是平衡二叉树+求一颗二叉树的镜像+判断一个数在二维数组中是否存在
- Floyd算法
- C/C++ | 29-21 两个字符串,s,t;把t字符串插入到s字符串中,s字符串有足够的空间存放t字符串
- html5
- 数字签名技术简介
- HDU 1301 Jungle Roads(最小生成树+克鲁斯卡尔算法)
- 面试题:判断一个节点是否在一棵二叉树中
- android 权限请求工具类
- 排序
- 搭建http服务将本地项目库导入GitLab
- 停止jetty-maven-plugin
- LeetCode-28-Implement strStr()(字符串匹配)
- [小记]JAVA对URL中的字符串处理(分割,转码)
- 关于空间风靡的心理入侵小游戏浅析
- 约瑟夫环