Hi
got something magical. node3 ( a variable) seems to point itself when i have not mad it so.
Please help me understand this behavior.
It seem to me like magic.
And do provide with if any suggestion to correct the problem.
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<fstream>
using namespace std;
class node //this is used to make class
{
public:
int x;
string code;
node *Right;
node *Left;
node() //constructor
{
Right = NULL;
Left = NULL;
code = "";
}
};
//vector<node> vec_code;
//string str;
void Arng(vector<node> &vec_nod) //function to arrange in decendin order.
{
for(int i=0;i<vec_nod.size();i++)
for(int j=i;j<vec_nod.size();j++)
if((vec_nod[i]).x<(vec_nod[j]).x)
swap(vec_nod[i],vec_nod[j]);
}
/*
* void Disp(vector<node> vec_node)
{
for(int i=0;i<vec_node.size();i++)
cout<<vec_node[i].x<<" ";
}
*/
vector<node> Cont(vector<int> vec)
{
vector<node> vec_nod;
node tm_nod;// tem_nod is temporary node in which i put values of vec and then push back to a vector of node (i.e vec_node).
for(int i=0;i<vec.size();i++){
tm_nod.x = vec[i];
vec_nod.push_back(tm_nod);
}
return vec_nod;
}
void Bi_tree(vector<node> &vec_nod) //This is my problem function
{
while(vec_nod.size()>=2){
Arng(vec_nod);
node *node1;
node *node2;
node *node3 = new node;
node1 = &vec_nod.back();
vec_nod.pop_back();
Arng(vec_nod);
node2 = &vec_nod.back();
vec_nod.pop_back();
node3->Left = node1;
cout<<node3->Left->x<<"left node\n";
node3->Right = node2;
cout<<node3->Right->x<<"Right node\n";
// cout<<node3->Right->Right->x<<"Right node\n"; //this line gives segmnetation fault, which is expected and required.
node3->x = node1->x + node2->x;
vec_nod.push_back(*node3);
// cout<<node3->Left->Right->x<<"left node\n"; //when this line is run in terminal it gives segmentation fault, which is proper.
cout<<vec_nod.back().Right->Right->x<<"Right node\n"; //And the problem is here. there should not be any value. it should
//have given segmentation fault as this is the same (node3) which giving me
//segmentation fault(i.e in line number 70).
//the node3 here seems to point to it self.
cout<<vec_nod.back().x<<endl;
}
}
/*
* void Bi_read(node *Root)
{
if(Root->Left != NULL){
Bi_read(Root->Left);
}
if(Root->Right != NULL){
Bi_read(Root->Right);
}
cout<<Root->x<<" ";
}
*/
int main()
{
vector<int> vec;
vector<node> vec_nod;
// string str;
node Root;
for(int i=0;i<2;i++)
vec.push_back(i);
vec_nod = Cont(vec);
Bi_tree(vec_nod);
cout<<(vec_nod.back()).x<<endl;
cout<<endl<<endl;
(vec_nod.back()).code = "";
// Bi_read(&(vec_nod.back()));
// Disp(vec_code);
return 0;
}