void BinaryTree<T>::sumDistances(const Node * subRoot, int len,int distance, queue<int> &q)const { if(subRoot==NULL) return; distance=len; len++; q.push(distance); sumDistances(subRoot->left, len, distance, q); sumDistances(subRoot->right, len, distance, q); }
int BinaryTree<T>::sumDistances(const Node *sub_root, int distance) const { // base case: if(sub_root == NULL) { return 0; } // recursive case: else { return sumDistances(sub_root->left, distance+1)+sumDistances(sub_root->right, distance+1)+distance; } }
int BinaryTree<T>::sumDistances(const Node * subRoot, int & dist) const{ int sum = 0; if (subRoot != NULL){ sum += dist; dist ++; sum += sumDistances(subRoot->left, dist); sum += sumDistances(subRoot->right, dist); dist --; return sum; } else return sum; }
int BinaryTree<T>::sumDistances(Node * subRoot, int dist) const { if(subRoot == NULL) return 0; if(subRoot->left == NULL && subRoot->right == NULL){ dist++; return dist; } else{ dist++; return dist + sumDistances(subRoot->left, dist) + sumDistances(subRoot->right,dist); } }
int BinaryTree<T>::sumDistances() const { if (root == NULL) return -1; int sum = 0; return sumDistances(root, sum); }
int BinaryTree<T>::sumDistances(const Node * a,int d) const { int left = 0; int right = 0; if(a->left==NULL && a->right==NULL) { return 0; } if(a->left!=NULL){ // its d+1 as you count the path of the previous node as well left = 1 + sumDistances(a->left,d+1)+d; } if(a->right!=NULL) // ditto right = 1 + sumDistances(a->right,d+1) + d; return left+right; // returning the sum of the paths on both left and right nodes }
int BinaryTree<T>::sumDistances() const { int sum=0; queue<int> Q; sumDistances(root, 0, 0, Q); while(!Q.empty()) { int a=Q.front(); sum=sum+a; Q.pop(); } return sum; }
int BinaryTree<T>::sumDistances() const { // your code here int d = 0; return sumDistances((*this).root, d); }
int BinaryTree<T>::sumDistances() const { int d = 0; return sumDistances(root,d); }
int BinaryTree<T>::sumDistances() const { return sumDistances(root, -1); }