本文共 728 字,大约阅读时间需要 2 分钟。
这道题首先要思考,肯定要用遍历二叉树,但是要用哪个遍历呢
最好的方法应该是后序遍历,把根结点放在最后一步访问
自底而上的方式顺序来重建链表
记得将右子树备份,左子树置空;
将左子树赋值给右子树,找到右子树的最后一个结点,把原来的右子树重新接上去
这样可以避免最后结果右子树顺序颠倒的问题
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: void flatten(TreeNode* root) { if(root==NULL) return; //后序遍历 flatten(root->left); flatten(root->right); TreeNode* r = root->right;//将右子树备份 root->right = root->left; root->left = NULL;//将左子树置空 while(root->right!=NULL)//找到右子树最后一个结点 root = root->right; root->right = r;//把原来的右子树接上去 }};
转载地址:http://ymgyk.baihongyu.com/