二叉树问题

来源:互联网 发布:瑞士军刀淘宝能卖吗 编辑:程序博客网 时间:2024/06/11 15:37

题目描述:

给出一个由n个结点组成的二叉树,根结点编号为1,所有结点的原始颜色为白色,现在对某一个结点进行染黑操作,执行操作后,由该结点为根结点的子树所有结点染黑,请问执行操作后有多少个结点变成黑色。保证输入合法,可以构成一颗二叉树,且编号不重复,操作的结点编号在二叉树存在。保证输入顺序是二叉树的先序遍历顺序,除去根结点编号。


输入:
第一行输入n(0<=n<=20)
随后n-1行代表除了根结点以外的结点,每一行输入一个结点编号index(1<index<100000),father(父结点)以及childtype(1代表作为父结点的右孩子,-1代表左孩子)
最后一行输入对结点编号m执行染黑操作



输出:
多少个结点变成黑色



样例输入:
5
2 1 -1
4 2 -1
5 4 -1
3 1 1
2



样例输出:
3


算法思想很简单,直接上代码;
#include <iostream>#include <vector>using namespace std;class myNode{public:myNode(int _value = 0):value(_value),left(NULL),right(NULL),parent(NULL){}unsigned value;myNode* left;myNode* right;myNode* parent;};int findCount(myNode * node){if (node == NULL){return 0;}return 1+ findCount(node->left) + findCount(node->right);}int main(){vector<myNode*> data(100001,NULL);int n , index , parent , left_right;cin>>n;data[1] = new myNode(1);for (int i = 0 ; i < n -1 ;++ i){cin>>index>>parent>>left_right;myNode *node = new myNode(index);if (left_right == -1){data[parent]->left = node;node->parent = data[parent];}else{data[parent]->right = node;node->parent = data[parent];}data[index] = node;}cin>>index;cout<<findCount(data[index]);system("pause");return 0;}





原创粉丝点击