C++ツリー
11643 ワード
二叉木ワイドパス:キュー 深さ遍歴:再帰(スタックでも実現可能)
ツリーのミラーリング
タイトルの説明
指定したツリーを操作し、ソースツリーのミラーに変換します.
説明を入力:
ツリーのミラー定義:
答え
#include
#include
using namespace std;
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int value){
this->val = value;
this->left = nullptr;
this->right = nullptr;
}
};
// 1
// 2 3
// 4 5 6 7
//
// 1 2 4 5 3 6 7
void preOrder(TreeNode* root){
if(root){
cout<< root->val << endl;
preOrder(root->left);
preOrder(root->right);
}
}
//
// 4 2 5 1 6 3 7
void inOrder(TreeNode* root){
if(root){
inOrder(root->left);
cout<< root->val << endl;
inOrder(root->right);
}
}
//
// 4 5 2 6 7 3 1
void postOrder(TreeNode* root){
if(root){
postOrder(root->left);
postOrder(root->right);
cout<< root->val << endl;
}
}
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->left = new TreeNode(6);
root->right->right = new TreeNode(7);
preOrder(root);
inOrder(root);
postOrder(root);
//
// 1 2 3 4 5 6 7
// queue q;
// q.push(root);
//
// while(!q.empty()){
// TreeNode* tmp = q.front();
// q.pop();
// cout << tmp->val << endl;
// if(tmp->left){
// q.push(tmp->left);
// }
// if(tmp->right){
// q.push(tmp->right);
// }
// }
}
ツリーのミラーリング
タイトルの説明
指定したツリーを操作し、ソースツリーのミラーに変換します.
説明を入力:
ツリーのミラー定義:
8
/ \
6 10
/ \ / \
5 7 9 11
8
/ \
10 6
/ \ / \
11 9 7 5
答え
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
void Mirror(TreeNode *pRoot) {
TreeNode* tmp;
if(pRoot){
tmp = pRoot->left;
pRoot->left = pRoot->right;
pRoot->right = tmp;
Mirror(pRoot->right);
Mirror(pRoot->left);
}
}
};