[又一次C++] 这两个程序怎么写。进来讨论,没有重谢!

大漠张三

知名会员
VIP
注册
2003-04-18
消息
9,432
荣誉分数
84
声望点数
158
Question 9. (8 marks). Binary Search Trees.
写一个function,print所有在BST中大于n的node。n是个integer。不可以traverse整个BST,谢谢。以下是BST里面Node的definition。
代码:
class TreeNode 
{ 
 public: 
     int key; 
     TreeNode *parent; 
     TreeNode *left; 
     TreeNode *right; 
};
 
its in java code, but also most the same idea about c++, good luck
代码:
	void printShittyNodes(TreeNode r, int toFind)
	{
		if (r != null)
		{
			if (r.getKey( ).isGreaterThan(toFind))
			{ printShittyNodes(r.getLeft( ), toFind); }
			else { printShittyNodes(v.getRight( ), toFind); }
		}
	}
 
最初由 陪你去看龙卷风 发布
its in java code, but also most the same idea about c++, good luck
代码:
	void printShittyNodes(TreeNode r, int toFind)
	{
		if (r != null)
		{
			if (r.getKey( ).isGreaterThan(toFind))
			{ printShittyNodes(r.getLeft( ), toFind); }
			else { printShittyNodes(v.getRight( ), toFind); }
		}
	}


你真的很nb呢
 
第二个:

选举时候的投票,投票的结果被存在一个character string里,Y就是同意,N就是不同意。比如, voteArray [Y][N][N][Y][N][Y][N], 投票的结果就是-1,因为有4个N,3个Y。
recursively define底下的这个function来计算最后的投票结果

int count ( char *voteArray, int highIndex, int lowIndex )
 
草稿, indexing array element那块可能错了,顺便问一句........大哥阿,你上课去了吗?
代码:
	int count ( char *voteArray, int highIndex, int lowIndex )
	{
		int toReturn = 0;
		if (highIndex != lowIndex)
		{
			if (voteArray[highIndex] == 'Y')toReturn += 1; 
			else toReturn -= 1; 
			(if voteArray[lowIndex] == 'Y') toReturn += 1;
			else toReturn -= 1; 
			toReturn += count(voteArray,highIndex-1,lowIndex+1);
		} return toReturn;
	}
 
最初由 风中有影 发布
void Tree::subPrint (TNode *subRoot) {

if (subRoot == NULL) return;

subPrint (subRoot -> left);
cout << subRoot -> data << endl;
subPrint (subRoot -> right);

}


void Tree::print () {

subPrint(root);

}
题目要求:不可以traverse整个BST的
 
最初由 陪你去看龙卷风 发布

题目要求:不可以traverse整个BST的
在上面哪个回帖里改一点点,不知道行不行
 
最初由 陪你去看龙卷风 发布
草稿, indexing array element那块可能错了,顺便问一句........大哥阿,你上课去了吗?

从来没去上课,早上10点谁起得来?

这个work不work?随便写了一个

代码:
int count (char*voteArray, int highIndex, int lowIndex) {
	
	if (highIndex - lowIndex < 0) return 0;

	else { 
		if (voteArray[highIndex] == Y)
		return (count(voteArray, highIndex - 1, lowIndex) + 1;
		else
		return (count(voteArray, highIndex - 1, lowIndex) - 1;
	}
}
 
..........10多晚啊,早睡早起身体好

大半夜的,不要老做爱做的事情,注意身体啊小伙子

我以前总是怎么说来着(自己测试一下就可以了贝:D)
 
最初由 风中有影 发布
void TreeNode::subprint (TreeNode *subRoot,int n) {


if(subRoot->key<n) return;
subPrint (subRoot -> left,n);
cout << subRoot -> key << endl;
subPrint (subRoot -> right,n);

}


首先呢,如果subRoot->key < n不一定代表n不在bst里,可以在right subtree。
在次,subPrint (subRoot -> left,n); 这一行return以后,cout那行就要被执行,不管node的key是不是大于n。
最后那行也会被execute
 
最初由 陪你去看龙卷风 发布
..........10多晚啊,早睡早起身体好

大半夜的,不要老做爱做的事情,注意身体啊小伙子

我以前总是怎么说来着(自己测试一下就可以了贝:D)


哈,您老太了解我了!我最爱遍程了,不遍程就心里不踏实!

自己测试还要搞一个main,还要先通过compiler那一关,太麻烦了
 
最初由 风中有影 发布
我的CODE向左走,向右走的情况都包了的.
在次,RETURN以后,为什么我还要COUT在RETURN的后面的东西.RETURN代表结束,难道我们学的C++不一样?



if(subRoot->key<n) return;
subPrint (subRoot -> left,n);
cout << subRoot -> key << endl;
subPrint (subRoot -> right,n);


假设这个tree的root是4,左边的subtree是3-2-1,右边的subtree是15-16-17。
n = 5,程序要求print出来比5大的数。

你的程序进去,先把4和5比,发现比5小就return了,右边的15, 16, 17呢?
 
后退
顶部