原理:利用先序遍历,将当前结点的左子结点 接到 当前结点的 右子结点处。 将当前结点右子结点接到 右子结点最后一个右结点后面。 代码如下:
void flatten(struct TreeNode* root){
if (root == NULL) return;
//保存右结点
struct TreeNode *oldRight = root->right;
//将左结点接到右结点处
root->right = root->left;
//清空左结点
root->left = NULL;
//查找右边最后面一个右结点
struct TreeNode *lastRight = root;
while(lastRight->right != NULL)
lastRight=lastRight->right;
lastRight->right=oldRight;
//处理右边结点
flatten(root->right);
}
网友评论