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

最初由 风中有影 发布
void TreeNode::subprint (TreeNode *subRoot,int n) {

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


应该是subRoot如果是NULL的话subRoot->key就是个seg fault
如果Root=n的话,你的code会print Root->key。
而且这样等于traverse整个的tree
 
最初由 风中有影 发布

不明白,subRoot->key是NULL不是代表某个分支的结尾么,没有怎么FAULT吧.任何一个LINKLIST的结尾都是NULL吧

我的意思是如果一个tree是空的呢?就是说它的subroot是NULL,那subRoot->key就是segmentation fault。
subRoot->next == NULL证明是分支结尾。
 
最初由 大漠张三 发布


我的意思是如果一个tree是空的呢?就是说它的subroot是NULL,那subRoot->key就是segmentation fault。
subRoot->next == NULL证明是分支结尾。
是空的不就直接RETURN么?我仔细想象热狗的方法还是比较好,我以为是很简单的情况:blowzy:
 
最初由 风中有影 发布
是空的不就直接RETURN么?我仔细想象热狗的方法还是比较好,我以为是很简单的情况:blowzy:

如果是NULL的话就不是treeNode,就不会有key这个field,所以treeNode->key 就会是segmentation fault。



我学ECE
 
最初由 大漠张三 发布


如果是NULL的话就不是treeNode,就不会有key这个field,所以treeNode->key 就会是segmentation fault。



我学ECE
我写的方法是不停向左右走的,就算到了最后一个NODE,还是左右走,所以会有SUNROOT为NULL的情况.介个是书上写的,不是俺发明D,;). 我学SYSM
 
最后一TRY,走人
void TreeNode::subprint (TreeNode *subRoot,int n) {

if(subRoot==NULL) return;

if(subRoot->right->key>n||subRoot->left->key>n){
subPrint (subRoot -> left,n);
cout << subRoot -> key << endl;
subPrint (subRoot -> right,n);
}else{
return;
}
}
 
最初由 arthur_xz 发布
:D
鼠标呢?不行,线不够长。
放心,lab的线够勒你小子的脖子了
周末lab研究一下2003,要不然就全军覆没了
 
最初由 风中有影 发布
最后一TRY,走人
void TreeNode::subprint (TreeNode *subRoot,int n) {

if(subRoot->key==NULL) return;

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

if(subRoot->key==NULL)是不可能的
因为如果TreeNode为Null的时候用subRoot->key唯一能出现的东西seg. fault
subRoot->key>n||subRoot->key>n they are the same thing, man

Binary Search Tree的结构/定义如下:
Definition: A binary tree where every node's left subtree has keys less than the node's key, and every right subtree has keys greater than the node's key.

他的左subtree的所有key都小于parent node.
右subtree的所有key都大于parent node.
 
最初由 陪你去看龙卷风 发布


if(subRoot->key==NULL)是不可能的
因为如果TreeNode为Null的时候用subRoot->key唯一能出现的东西seg. fault
subRoot->key>n||subRoot->key>n they are the same thing, man

Binary Search Tree的结构/定义如下:
Definition: A binary tree where every node's left subtree has keys less than the node's key, and every right subtree has keys greater than the node's key.

他的左subtree的所有key都小于parent node.
右subtree的所有key都大于parent node.
改了,我觉得IDEA不会有问题
void TreeNode::subprint (TreeNode *subRoot,int n) {

if(subRoot==NULL) return;

if(subRoot->right->key>n||subRoot->left->key>n){
subPrint (subRoot -> left,n);
cout << subRoot -> key << endl;
subPrint (subRoot -> right,n);
}else{
return;
}
}
 
加一个版本,不知道对不对,没测试过,只是和大家讨论
void TreeNode::subprint (TreeNode *subRoot,int n) {

if(subRoot==NULL) return;

if(subRoot->right->key>n||subRoot->left->key>n&&subRoot->key>=n){
subPrint (subRoot -> left,n);
cout << subRoot -> key << endl;
subPrint (subRoot -> right,n);
}
if(subRoot->right->key>n||subRoot->left->key>n&&subRoot->key<n){
subPrint (subRoot -> left,n);
subPrint (subRoot -> right,n);
}else{
return;
}
}
 
是不是漏了个 if(subRoot->key==n) return; 的condition?
 
后退
顶部