|
I will paste the code. But they are working fine when they are called individually.
int minValue(TreeNode * root) {
TreeNode * current = root;
if (current == NULL) return -1;
else {
while (current->left != NULL)
current = current->left;
return current->num;
}
}
int maxValue(TreeNode * root) {
TreeNode * current = root;
if (current == NULL)
return -1;
else
{
while (current->right != NULL)
current = current->right;
return current->num;
}
}
And they are called as posted above. One more time, when called individually they work fine.
|
|
|
|
|
Where's the recursion?
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
|
|
|
|
|
I'm sorry, the recursion is in other functions, not in this one. Do you know why it's not working when they are called together?
|
|
|
|
|
Just a theory, but does the following work:
int min = minValue(root)
int max = maxValue(root));
printf("Min Val: %d Max Val: %d\n", min, max);
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
|
|
|
|
|
That works, but I wanted to understand why the other version does not work?
Here is all the code if you want to try.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct treenode {
int num;
struct treenode * left;
struct treenode * right;
} TreeNode;
int recLookup (TreeNode *, int);
int lookUp(TreeNode *, int);
int sizeRec(TreeNode *);
int maxDepth(TreeNode *);
int minValue(TreeNode *);
int maxValue(TreeNode *);
int hasPathSum(TreeNode *, int);
TreeNode * createNode (int);
TreeNode * insertRec(TreeNode *, int);
TreeNode * buildTree();
void deleteRec(TreeNode *);
void printIncreasing(TreeNode *);
void printPostOrder(TreeNode *);
void printPaths(TreeNode *);
void printPathRecur(TreeNode *, int[], int);
enum { FALSE, TRUE };
int main (void) {
TreeNode * root = buildTree();
printf("Size: %d\n", sizeRec(root));
printf("Max Depth: %d\n", maxDepth(root));
printf("Min Value: %d\n", minValue(root));
printf("Max Value: %d\n", maxValue(root));
printIncreasing(root); puts("");
printPostOrder(root); puts("");
printf("Has path sum 15: %d\n", hasPathSum(root, 15));
printPaths(root);
printf("Min Val: %d Max Val: %d\n", minValue(root), maxValue(root));
deleteRec(root);
return 0;
}
void printPaths(TreeNode * root) {
int path[10];
int pathLen = 0;
printPathRecur(root, path, pathLen);
}
void printPathRecur(TreeNode * node, int path[], int pathLen) {
if (node == NULL) return;
path[pathLen] = node->num;
pathLen++;
if (node->right == NULL && node->left == NULL) {
int i;
for (i = 0; i < pathLen; i++)
printf("%d ", path[i]);
puts("");
}
else {
printPathRecur(node->left, path, pathLen);
printPathRecur(node->right, path, pathLen);
}
}
int hasPathSum(TreeNode * root, int num) {
TreeNode * current = root;
if (current == NULL)
return num == 0;
else {
int n = num - current->num;
return
hasPathSum(current->left, n) ||
hasPathSum(current->right, n);
}
}
void printPostOrder(TreeNode * root) {
TreeNode * current = root;
if (current == NULL) return;
printPostOrder(current->left);
printPostOrder(current->right);
printf("%d ", current->num);
}
void printIncreasing(TreeNode * root) {
TreeNode * current = root;
if (current == NULL) return;
printIncreasing(current->left);
printf("%d ", current->num);
printIncreasing(current->right);
}
int minValue(TreeNode * root) {
TreeNode * current = root;
if (current == NULL) return -1;
else {
while (current->left != NULL)
current = current->left;
return current->num;
}
}
int maxValue(TreeNode * root) {
TreeNode * current = root;
if (current == NULL)
return -1;
else
{
while (current->right != NULL)
current = current->right;
return current->num;
}
}
int maxDepth (TreeNode * root) {
if (root == NULL) return 0;
else {
int lDepth = maxDepth(root->left);
int rDepth = maxDepth(root->right);
if (lDepth > rDepth) return (lDepth + 1);
else return (rDepth + 1);
}
}
void deleteRec(TreeNode * root) {
if (root == NULL) return;
else {
deleteRec(root->right);
deleteRec(root->left);
free(root);
}
}
int sizeRec (TreeNode * root) {
if (root == NULL) return 0;
else
return 1 + sizeRec(root->right) + sizeRec(root->left);
}
TreeNode * buildTree() {
TreeNode * root = insertRec(root, 4);
root = insertRec(root, 3);
root = insertRec(root, 6);
return root;
}
TreeNode * insertRec (TreeNode * node, int num) {
if (node == NULL)
return createNode(num);
else {
if (num <= node->num) node->left = insertRec(node->left, num);
else node->right = insertRec(node->right, num);
}
return node;
}
TreeNode * createNode(int num) {
TreeNode * newNode = (TreeNode *) malloc (sizeof (TreeNode));
newNode->num = num;
newNode->right = NULL;
newNode->left = NULL;
return newNode;
}
int lookUp(TreeNode * node, int num) {
while (node != NULL) {
if (node->num == num) return TRUE;
else {
if (num < node->num) node = node->left;
else node = node->right;
}
}
return FALSE;
}
int recLookup (TreeNode * node, int num) {
if (node == NULL)
return FALSE;
else {
if (node->num == num) return TRUE;
else {
if (num < node->num) return recLookup(node->left, num);
else return recLookup(node->right, num);
}
}
}
|
|
|
|
|
In buildTree() , change the first statement to:
TreeNode * root = insertRec(NULL, 4); As you had it, root was being used without having been initialized.
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
|
|
|
|
|
|
Good evening.
I want to know the cpu temperature sample code.
I want something that is written in Visual C ++ code.
Wait a minute you know you had one answer or experience.
Thanks.
|
|
|
|
|
|
I can give you some pointers (no pun intended) using WMI.
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
|
|
|
|
|
Hello,
I have a namespace and class defined inside a cpp file (say x.cpp ). I want to declare this class as 'friend' inside another header (say y.h), but the header won't recognize the namespace.
Now, when I put the namespace in another header (x.h) and include it in y.h, I get a re-definition error ( also in x.cpp ). I can't remove the namespace definition from x.cpp, since it has been put together by a framework for me, and I won't be able to use the framework otherwise.
Does this mean I can't declare this class as friend of any other class ?
Regards,
Raj Abhishek
|
|
|
|
|
Can you post the relevant code snippets? It's hard to tell what's going on from your description.
The difficult we do right away...
...the impossible takes slightly longer.
|
|
|
|
|
If I remember correctly you can (at least in VS 6.0) include .cpp files the same way you include header files. However it's not a very good practice.
You could consider defining some kind of helper class or interface class in z.h and include this file in both x.cpp and y.h. Then you could declare z a friend of y and "channel" the function calls from x through z. Alternatively you could even derive y from z and wouldn't need a friend declaration.
The good thing about pessimism is, that you are always either right or pleasently surprised.
|
|
|
|
|
Have you already tried a forward declaration, like this:
namespace myspace {
class x; };
class y {
friend myspace::x;
};
GOTOs are a bit like wire coat hangers: they tend to breed in the darkness, such that where there once were few, eventually there are many, and the program's architecture collapses beneath them. (Fran Poretto)
|
|
|
|
|
Hi,
I'm developing a wxWidgets 3.0 project using this Json_spirit library with boost 1_46_0 in Visual Studio 2008.
I Edited all the Additional directories and Additional Dependencies in the properties
After compiling the project I'm getting linkage error like
"
error LNK2019: unresolved external symbol "bool __cdecl json_spirit::read(class std::basic_istream<char,struct std::char_traits<char> > &,class json_spirit::Value_impl<struct json_spirit::Config_vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > &)" (?J_read@json_spirit@@YA_NAEAV?$basic_istream@DU?$char_traits@D@std@@@std@@AEAV?$Value_impl@U?$Config_vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@json_spirit@@@1@@Z) referenced in function "private: class wxWindow * __cdecl HiFrame::ReadingJson(class wxWindow *,class wxString &,class wxString &)" (?ReadingJson@HiFrame@@AEAAPEAVwxWindow@@PEAV2@AEAVwxString@@1@Z) "
can anybody help me out to resolve this problem.??
thanks..
modified 27-Mar-15 5:20am.
|
|
|
|
|
You are missing a library in your linker section. Check the documentation for the library in question and it will tell you what you need to include.
|
|
|
|
|
"json_spirit.h" i have included this file for reading json file.
|
|
|
|
|
Member 11258353 wrote: "json_spirit.h" i have included this file for reading json file. That is a header file used during compilation.
But you got a linker error telling you that a library is missing (the name may be json_spirit.lib).
|
|
|
|
|
yeah, I have included that lib also(json_spirit_lib.lib)
which is in json_spirit_v4.08\Debug path.
Still, The error is coming.
|
|
|
|
|
Check the name and path of the library and the corresponding project settings. The path must be part of the library search path or the complete path must be specified.
|
|
|
|
|
Okay,
For json_spirit_lib.lib in properties->linker->additional Library directory i gave this path "D:\json_spirit_v4.08\Debug"
For json_spirit.h in properties->c++->additional include directories i gave this path
"D:\json_spirit_v4.08\json_spirit"
For boosting in properties->c++->additional include directories i gave this path
"D:\boost_1_46_0"
In properties->linker->Input->Additional dependencies i included json_spirit_lib.lib.
Still not getting,,
|
|
|
|
|
To get more information you should enable verbose output for the linker (Project Settings - Linker - General - Show progress: VERBOSE).
You may also use the dumpbin command line utility (in the VC/bin directory) to check which functions are exported by the library.
The library must be build for your VS version. Did you build it yourself?
Did you get only one or multiple linker errors?
|
|
|
|
|
Getting Linkage errors at Both Json_spirit::Read() and Json_spirit::Write() functions.
Just again i build the lib. now i'm getting error like
1>c:\documents and settings\administrator\my documents\downloads\boost_1_46_0\boost\function\function_base.hpp(408) : fatal error C1128: number of sections exceeded object file format limit : compile with /bigobj
what to do??
modified 27-Mar-15 8:29am.
|
|
|
|
|
The error message gave you the answer:
Member 11258353 wrote: compile with /bigobj
You may also search the web for this error message related to boost.
|
|
|
|
|