问题描述:
深度复制一个二叉树。
给定一个二叉树,返回一个他的 克隆品
样例:
给定一个二叉树:
1
/ \
2 3
/ \
4 5
返回其相同结构相同数值的克隆二叉树:
1
/ \
2 3
/ \
4 5
解题思路:
定义一个根节点,对给定二叉树遍历,同时这个二叉树也跟着遍历,每访问一个节点就复制一下,然后再申请下一个节点空间。
代码:
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param root: The root of binary tree
* @return root of new tree
*/
void PreorderTraversal(TreeNode *root1, TreeNode *root2) {
if (root1== NULL)return;
root2->val= root1->val;
if (root1->left!= NULL) {root2->left=new TreeNode(0);}
PreorderTraversal(root1->left, root2->left);
if (root1->right!= NULL) {root2->right=new TreeNode(0);}
PreorderTraversal(root1->right, root2->right);
}
TreeNode* cloneTree(TreeNode *root) {
// Write your code here
if (root== NULL) return NULL;
TreeNode *ROOT;
ROOT= new TreeNode(0);
PreorderTraversal(root, ROOT);
return ROOT;
}
};
感想:
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param root: The root of binary tree
* @return root of new tree
*/
void PreorderTraversal(TreeNode *root1, TreeNode *root2) {
if (root1== NULL)return;
root2->val= root1->val;
if (root1->left!= NULL) {root2->left=new TreeNode(0);}
PreorderTraversal(root1->left, root2->left);
if (root1->right!= NULL) {root2->right=new TreeNode(0);}
PreorderTraversal(root1->right, root2->right);
}
TreeNode* cloneTree(TreeNode *root) {
// Write your code here
if (root== NULL) return NULL;
TreeNode *ROOT;
ROOT= new TreeNode(0);
PreorderTraversal(root, ROOT);
return ROOT;
}
};
利用了二叉树的前序遍历,对一个新树赋值。