树的中序遍历,recursion or iterative
在看例程的时候,我注意到很重要的一个点,就是连等,
我不太明白为什么要先改变cur的值,不应该先把right指向新节点,再改变当前cur吗?没搞明白,问了阳神,还是没懂。。。。
哭唧唧
下面是我根据自己的理解写的AC代码
/**
* 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 inorder( TreeNode* root , vector<int>& r){
if( root == NULL )return ;
inorder( root->left ,r);
r.push_back( root->val );
inorder( root->right , r );
}
TreeNode* increasingBST(TreeNode* root) {
if( root == NULL )return root;
vector<int> r;
inorder( root , r );
int l = r.size();
TreeNode* cur = new TreeNode(0);
TreeNode* res = cur;
for( int i = 0 ; i < l ; i ++ ){
TreeNode* nn = new TreeNode( r[i] );
cur->right = nn;
cur = nn;
}
return res->right;
}
};