Insertion Sort List and Binary Tree Paths

题意如下:
Given a binary tree, return all root-to-leaf paths.

For example, given the following binary tree:

1
/ \
2 3
\
5

All root-to-leaf paths are:

[“1->2->5”, “1->3”],

返回所有的从叶子节点到根节点的路径,这个用递归法,一层层的遍历即可,遍历过程中非空即存入对应的vector中:

class  Solution {
private : vector<string>  res;
public :
   vector<string> binaryTreePaths(TreeNode* root){
      if(root == NULL) {
           ;
      } else if(root->left == NULL && root->right == NULL) {
       string temp = to_string(root->val);
       res.push_back(temp);
       } else{
           if(root->left !=NULL){
                 traverse(root->left,to_string(root->val));
           }
          if(root->right !=NULL){
            traverse(root->right,to_string(root->val));
          }
       }
       return  res;
    }
public :
  void  traverse(TreeNode*  node, string s){
         if(node == NULL)
             return;  
       if(node->left == NULL && node->right == NULL){
           string tmp = to_string(node->val);
            res.push_back(s+"->"+tmp);
            return ;
        } else {
             if(node->left !=NULL){
             string tmp1 = to_string(node->val);
             traverse(node->left,s+"->"+tmp1);
             }

             if(node->right !=NULL){
             string tmp2 = to_string(node->val);
             traverse(node->right,s+"->"+tmp2);
             }
        }
     }
  };        

齐活了,完成。

再来看看链表的,insertion sort List.很明白,用插入算法来排序

没什么可讲的直接上代码:

class Solution {
public :
  ListNode*  insertionSortList(ListNode*  head){
      if(head == NULL || head->next ==NULL)
          return head;
          ListNode*   p = new ListNode(-1);
          p->next = head;

         ListNode*  pre=  head;
         ListNode*  cur = pre->next;
         while(cur !=NULL){
               if(cur->val >=pre->val){
                  cur = cur->next;
                  pre = pre->next;
                }else{
                   ListNode*  insertpre = p;
                   ListNode*  insertcur = p->next;

                while(insertcur->val < cur->val){
                   insertpre = insertcur;
                   insertcur = insertcur->next;
                }
                pre->next = cur->next;
                cur->next = insertcur;
                insertpre ->next = cur;
                cur = pre->next;
         }
         }
         head = p->next;
         return head;
      }

  };

齐活了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值