思路题

来源:互联网 发布:阿里云备案幕布 psd 编辑:程序博客网 时间:2024/04/30 14:23

1.输入一个二叉树的序列要求得出二叉树的镜像
ps:可以先画图进行分析思考
这道题目很好想,既然是镜像,那么原二叉树的左子树即为新二叉树的右子树,依次类推,构造代码如下(左右子树均互换即可)

treeNode* createImage(char*& str){    if (str == NULL)    {        return NULL;    }    if (str[0] == '\0' || str[0] == '#')    {        return NULL;    }    treeNode* s = buyNode();    s->data = str[0];    s->right = createImage(++str);    s->left = createImage(++str);    return s;}

注意特殊的输入情况,如果题目要求用循环,那么注意二叉树的顺序是如何给你的

2.顺时针打印矩阵

void show(int a[][4], int beg,int chang,int kuan){    if (a==NULL||beg>=kuan||beg>=chang)    {        return;    }    int c = beg;    int k = beg;    while (k<kuan)//长对应行,宽对应列    {        cout << a[c][k] << " ";        k++;    }    cout << endl;    k--;    c++;    while (c < chang)    {        cout << a[c][k] << " ";        c++;    }    c--;    k--;    cout << endl;    while (k >= beg)    {        cout << a[c][k] << " ";        k--;    }    k++;    c--;    cout << endl;    while (c > beg)    {        cout << a[c][k] << " ";        c--;    }    cout << endl;    show(a, beg + 1, chang - 1, kuan - 1);}

3.包含min函数的栈
定义栈的数据结构,请在该类型实现一个能够得到栈的最小元素的min函数,在该栈中,调用min,push及pop的时间复杂度都是O(1)
思路:
可以设置一个辅助栈,里面根据主栈的压入数据每次压入最小的,当主栈出数据,辅助栈也出一个,保持两个栈的数据数目一致
注意参数检测

4.输入两个证书序列,判断如果以1入栈,则2是否是1出栈的可能
代码如下

bool judge(int arr[], int brr[], int len)//arr为压栈顺序{    if (len <= 1)    {        return true;    }    stack<int> m1;    int tmp = brr[0];//4    int flag=0;    int i = 0;//12345    int j = 0;//45321    while (j < len)    {        if (!m1.empty())        {            if (m1.top() == brr[j])            {                m1.pop();                j++;                tmp = brr[j];                continue;            }            else            {                if (flag == 1)                {                    return false;                }            }        }        while (arr[i] != tmp&&i < len)        {            m1.push(arr[i]);//123            i++;        }        if (brr[j] == arr[len-1])        {            flag = 1;        }        j++;//1        i++;        tmp = brr[j];    }    return true;}

5.层序遍历二叉树

void printCeng(treeNode* s){    if (s == NULL)    {        return;    }    queue<treeNode*> m1;    m1.push(s);    while (!m1.empty())    {        treeNode* tmp = m1.front();        m1.pop();        cout << tmp->data << " ";        if (tmp->left != NULL)        {            m1.push(tmp->left);        }        if (tmp->right!= NULL)        {            m1.push(tmp->right);        }    }}

明天还会补充

0 0
原创粉丝点击