例如输入:
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;
}