Untitled
unknown
c_cpp
4 years ago
1.5 kB
13
Indexable
pair<BinaryTreeNode<int>*, int> findNode(BinaryTreeNode<int>* root, int key, int len){
if(root == NULL) return {root, len};
if(root->data == key){
return {root, len};
}
len += 1;
pair<BinaryTreeNode<int>*, int> p1 = findNode(root->left, key, len);
pair<BinaryTreeNode<int>*, int> p2 = findNode(root->right, key, len);
if(p1.first->data == key){
return {root, len};
}
if(p2.first->data == key){
return {root, len};
}
return {NULL, 0};
}
void printNodesK(BinaryTreeNode<int> * root, int k){
if(root == NULL) return;
if(k == 0){
cout<<root->data<<" ";
return;
}
printNodesK(root->left, k-1);
printNodesK(root->right, k-1);
}
void nodesAtDistanceK(BinaryTreeNode<int> *root, int node, int k) {
if(root == NULL)
return;
int len = 0, k2;
pair<BinaryTreeNode<int>*, int> P = findNode(root, node, len);
if(P.first == NULL) return;
BinaryTreeNode<int>* node = P.first;
len = P.second;
if(k > len){
k2 = k-len;
}
if(root->data > node){
printNodesK(node, k);
printNodesK(root->right, k2);
}
else if(root->data == node){
printNodesK(root, k);
}
else{
printNodesK(root->left, k2);
printNodesK(node, k);
}
// Write your code herez
}Editor is loading...