数据结构算法第九套大题

本文介绍了如何使用C语言实现计算二叉树所有节点之和的算法,快速排序将奇数排在偶数前面,判断链表是否递增,以及判断字符串中的括号是否有效的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.计算二叉树所有结点之和的算法:

void sum(BiTree* bt,int *sum){ //sum为节点之和
  //1.base
  if(bt==NULL) return;
  //2.前序:增加当前节点的值
  *sum+=bt->data;
  //3.递归
  sum(bt->lchild,sum);
  sum(bt->rchild,sum);
}

2.将奇数排在偶数前面

/*
* 快速排序,将奇数排在偶数前面
* 参数说明:
* r[]:待排序数组
* s:起始下标
* t:结束下标
*/
void quickPass(int[]r,int s,int t){
  int i=s; //左指针,从起始位置开始
  int j=t;//右指针,从结束位置开始
  int x=r[s];//选择起始位置作基准值
  //2.遍历
  while(i<j){
   //2.1从右向左找到第一个奇数,循环结束时 r[j] 为奇数或者i==j
   while(i<j&&r[j]%2==0) j--;
   if(i<j){
     //2.2将r[j]赋值给r[i]:找到的奇数放在前面
     r[i]=r[j];
     i++; //更新left指针位置
   }
   
   //3.1从左至右寻找第一个偶数,循环结束时r[i]为偶数
   while(i<j&&r[i]%2==1) i++; //find偶数
   if(i<j){
    //替换
    r[j]=r[i];
    j--;//偶数放后面,偶数覆盖后面的值
   }
 }
 //4.最后将基准值x放入最终位置
 r[i]=x;
}


3.判断链表是否递增:

// 判断单链表中元素是否递增的函数
bool isListIncreasing(struct ListNode* head) {
    // 如果链表为空或者只有一个节点,则一定是递增的
    if (head == NULL || head->next == NULL) {
        return true;
    }

    // 从头节点开始遍历链表
    struct ListNode* current = head;

    while (current->next != NULL) {
        // 检查当前节点和下一个节点的值是否递增
        if (current->value > current->next->value) {
            return false;  // 如果不是递增,则返回 false
        }
        current = current->next;  // 移动到下一个节点继续检查
    }

    return true;  // 链表中所有节点都是递增的情况下返回 true
}

4.判断是否为有效括号

class Solution {
    public boolean isValid(String str) {
        Stack<Character> left = new Stack<>();
        for (char c : str.toCharArray()) {
            if (c == '(' || c == '{' || c == '[')
                left.push(c);
            else // 字符 c 是右括号
                if (!left.isEmpty() && leftOf(c) == left.peek())
                    left.pop();
                else
                    // 和最近的左括号不匹配
                    return false;
        }
        // 是否所有的左括号都被匹配了
        return left.isEmpty();
    }

    char leftOf(char c) {
        if (c == '}') return '{';
        if (c == ')') return '(';
        return '[';
    }
}

C语言问题:

bool IsBraCheck(char *str){
   //1.初始化栈
   InitStack(S);
   int i=0;
   while(str[i]!='\0'){
     //1.左括号则压入栈中
     switch(str[i]){
     case '(': Push(S,'('); break;
     case '{': Push(S,'{'); break;
     case '[': Push(S,'['); break;
     //2.右括号
     case ')': Pop(S,e);
        if(e!='(') return false;
     break;   
     case ']': Pop(S,e);
        if(e!='[') return false;
     break;
     case '}': Pop(S,e);
        if(e!='{') return false;      
     break;
    }
    i++; 
   }
   return IsEmpty(S)?true:false;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fairy要carry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值