您的位置:首页 > 其它

第十二题 将二叉查找树左右节点反转

2014-04-13 17:21 190 查看
例如输入:

8

/ \

6 10

/\ /\

5 7 9 11

输出:

8

/ \

10 6

/\ /\

11 9 7 5

//将二叉查找树左右节点反转
#include <iostream>
using namespace std;
struct tree
{
int value;
tree *left;
tree *right;
};
void addTree(tree *&ptr,int value)
{
if (ptr==nullptr)
{
tree *currentptr=new tree();
currentptr->value=value;
currentptr->left=nullptr;
currentptr->right=nullptr;
ptr=currentptr;
}
else
{
if (ptr->value>value)
{
addTree(ptr->left,value);
}
else
{
addTree(ptr->right,value);
}
}
}
void reversetree(tree *&ptr)
{
if (ptr==nullptr)
{
return;
}
//判断是否为叶子节点
bool isleaf=(ptr->left&&ptr->right);
if (isleaf)
{
//交换左右节点
tree *temp=ptr->left;
ptr->left=ptr->right;
ptr->right=temp;
if (ptr->left)
{
reversetree(ptr->left);
}
if (ptr->right)
{
reversetree(ptr->right);
}
}

}

int main()
{
tree *root=nullptr;
addTree(root,8);
addTree(root,10);
addTree(root,6);
addTree(root,9);
addTree(root,11);
addTree(root,5);
addTree(root,7);
reversetree(root);
cout<<root->value<<endl;
cout<<root->left->value<<endl;
cout<<root->left->left->value<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: