原理:利用先序遍歷,將當(dāng)前結(jié)點(diǎn)的左子結(jié)點(diǎn) 接到 當(dāng)前結(jié)點(diǎn)的 右子結(jié)點(diǎn)處育谬。 將當(dāng)前結(jié)點(diǎn)右子結(jié)點(diǎn)接到 右子結(jié)點(diǎn)最后一個(gè)右結(jié)點(diǎn)后面帮哈。 代碼如下:
void flatten(struct TreeNode* root){
if (root == NULL) return;
//保存右結(jié)點(diǎn)
struct TreeNode *oldRight = root->right;
//將左結(jié)點(diǎn)接到右結(jié)點(diǎn)處
root->right = root->left;
//清空左結(jié)點(diǎn)
root->left = NULL;
//查找右邊最后面一個(gè)右結(jié)點(diǎn)
struct TreeNode *lastRight = root;
while(lastRight->right != NULL)
lastRight=lastRight->right;
lastRight->right=oldRight;
//處理右邊結(jié)點(diǎn)
flatten(root->right);
}