判断一个节点是否在二叉树中,判断tree2是否为tree1的子树
2017-08-01 22:50
483 查看
1、判断一个节点是否在一棵二叉树中。
先判断根节点,递归判断左子树,递归判断右子树。2、判断一颗二叉树是是否是另一颗树的子树。比如tree2是tree1的子树。
先判断根,根相同再判断左右子树如果所有的都相同,则此树是另一个树的子树。 如果只有根相同,则向下继续找和跟相同的结点。
代码:
#include<iostream> using namespace std; struct Node { int _data; Node* _leftchild; Node* _rightchild; Node(int x) :_data(x) , _leftchild(NULL) , _rightchild(NULL) {} }; class BinaryTree { public: BinaryTree(const int a[], int size, int invalide) { int index = 0; _root = _CreateBinaryTree(a, size, index, invalide); } Node* _CreateBinaryTree(const int a[], int size, int &index, int invalide) { Node* root = NULL; if (index < size && a[index] != invalide) { root = new Node(a[index]); root->_leftchild = _CreateBinaryTree(a, size, ++index, invalide); root->_rightchild = _CreateBinaryTree(a, size, ++index, invalide); } return root; } //判断一个节点是否在一棵二叉树中。(注意多测几个节点,看是否都能找到) bool IsInTree(Node* node) { return _IsInTree(_root, node); } bool _IsInTree(Node* root, Node* node) { if (root == NULL) return false; if (root == node) return true; if (_IsInTree(root->_leftchild, node) || _IsInTree(root->_rightchild, node)) return true; return false; } //判断一颗二叉树是是否是另一颗树的子树。比如tree2是tree1的子树。 bool IsChildTree(Node* pRoot) { return _IsChildTree(_root, pRoot); } bool __IsChildTree(Node* root, Node* pRoot) { if (root == NULL) return false; if (pRoot == NULL) return true; if (root->_data != pRoot->_data) return false; return __IsChildTree(root->_leftchild, pRoot) && __IsChildTree(root->_rightchild, pRoot->_rightchild); } bool _IsChildTree(Node* root, Node* pRoot) { bool ret = false; if (root != NULL&&pRoot != NULL) { if (root->_data == pRoot->_data) ret = __IsChildTree(root, pRoot); if (!ret) ret = _IsChildTree(root->_leftchild, pRoot); if (!ret) ret = _IsChildTree(root->_rightchild, pRoot); } return ret; } private: Node* _root; }; int main() { system("pause"); return 0; }
相关文章推荐
- 判断一颗二叉树是是否是另一颗树的子树。比如tree2是tree1的子树
- 判断一个节点是否在一棵二叉树中&判断一颗二叉树是是否是另一颗树的子树
- day14之判断一个节点是否在一棵二叉树中+判断一颗二叉树是是否是另一颗树的子树
- 2个二叉树A、B,树的每个节点上都有一个整数值。如何判断A与B是否其中一个是另一个的子树?
- 判断一个节点是否在一棵二叉树中和判断一颗二叉树是否是另一颗树的子树——题集(十二)
- 二叉树--判断一颗二叉树是是否是另一颗树的子树。比如tree2是tree1的子树。
- 【判断一个节点是否在一棵二叉树中】/【判断一颗二叉树是是否是另一颗树的子树】
- 判断一个节点是否在一棵二叉树中&&判断一颗二叉树是是否是另一颗树的子树
- 如何判断一个二叉树是否为另一个二叉树的子树
- 判断一个节点是否在一棵二叉树中
- 百度笔试题:判断一个二叉树是否是另一颗二叉树的子树
- 如何判断一个二叉树是否为另一二叉树子树u
- 每日一题之判断一个节点是否在一棵二叉树中
- 判断一个节点是否在一棵二叉树中
- Java代码 给出一个二叉树和一个数,判断该二叉树是否存在一个从根节点到叶节点的和与给出的数相同
- 二叉树--判断一个节点是否在一棵二叉树中。
- 有一个二叉树,现在怀疑它有一个结点有2个父节点,请写出一个函数来判断该二叉树是否存在一个节点含有2个父节点。如果存在,返回true,否则返回false。
- 判断一个二叉树是否是另一个的子树
- 面试题:判断一个节点是否在一棵二叉树中
- 判断一个二叉树是否是另一个二叉树的子树