没搞懂的问题

没搞懂:1;



class TreeNode {
  public:
      int val;
      TreeNode *left, *right;
      TreeNode(int val) {
          this->val = val;
          this->left = this->right = NULL;
      }
  };
class Solution {
public:
    /**
     * @param root: a TreeNode, the root of the binary tree
     * @return: nothing
     */

     /*
      *为什么这样就是错误的??????
      * /
//    void invertBinaryTree(TreeNode * root) {
//        // write your code here
//        if (root==NULL)
//            return;
//        if (root->left==NULL && root->right ==NULL)
//            return;

//        if (root->left==NULL){
//            root->left=root->right;
//            root->right==NULL;
//            invertBinaryTree(root->left);
//        }else if (root->right==NULL){
//            root->right=root->left;
//            root->left==NULL;
//            invertBinaryTree(root->right);
//        }else{
//            TreeNode *left = root->left, *right = root->right;
//            root->left = right; root->right = left;
//            invertBinaryTree(root->left);
//            invertBinaryTree(root->right);
//        }
//    }

    /*
     * 为什么这样就正确,上面就错误
     */
    void invertBinaryTree(TreeNode * root) {
        // write your code here
        if (root==NULL)
            return;

        TreeNode *left = root->left, *right = root->right;
        root->left = right; root->right = left;
        invertBinaryTree(root->left);
        invertBinaryTree(root->right);

    }

};
======================
======================
======================
======================
======================
没搞懂2:可能是指针的问题。
class Solution {
public:
    /**
     * @param head: ListNode head is the head of the linked list
     * @param m: An integer
     * @param n: An integer
     * @return: The head of the reversed ListNode
     */
    ListNode * reverseBetween(ListNode * head, int m, int n) {
        // write your code here
        int count=n-m;

        ListNode* start=head;
        ListNode *before_begin ;

        ListNode *tail=NULL;
        ListNode * head11=head;

//        ListNode *before_begin;
        ListNode *real_begin;

        for(int i=1;i<m;i++){
            if(i==m-1)
                before_begin = head11;
            head11=head11->next;
        }
        real_begin=head11;
        reverse_linklist2(real_begin,count,tail);
        before_begin->next=real_begin;



        return head;
    }

    void reverse_linklist2(ListNode*& head,int count,ListNode *&tail)
    {
        ListNode *p = head;
        if(count-1==0){
            tail=p->next;
            p->next==NULL;
            return ;
        }
        head = p->next;

        cout<<"head=="<<head->val<<endl;

        reverse_linklist2(head,count-1);

        p->next->next = p;
        p->next = NULL;
    }

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值