
#include <bits/stdc++.h>
using namespace std;
struct TreeNode {
int val = 0;
TreeNode* left;
TreeNode* right;
TreeNode(int x)
{
val = x;
left = right = NULL;
}
};
void printTree(TreeNode* root)
{
if (!root)
return;
printTree(root->left);
cout << root->val << " ";
printTree(root->right);
}
TreeNode* shiftRight(TreeNode* root)
{
if (!root)
return NULL;
stack<TreeNode*> st;
queue<TreeNode*> q;
if (root->right)
q.push(root->right);
root->right = NULL;
if (root->left)
q.push(root->left);
root->left = NULL;
st.push(root);
while (!q.empty()) {
int n = q.size();
stack<TreeNode*> temp;
while (n--) {
if (!st.top()->right)
st.top()->right = q.front();
else {
st.top()->left = q.front();
st.pop();
}
if (q.front()->right)
q.push(q.front()->right);
q.front()->right = NULL;
if (q.front()->left)
q.push(q.front()->left);
q.front()->left = NULL;
temp.push(q.front());
q.pop();
}
while (!st.empty())
st.pop();
while (!temp.empty()) {
st.push(temp.top());
temp.pop();
}
}
return root;
}
int main()
{
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
root->right->right = new TreeNode(6);
root = shiftRight(root);
printTree(root);
return 0;
}
0 comments:
Post a Comment