資料結構 面試

2021-07-25 16:33:27 字數 2182 閱讀 4158

看了劍指offer發現乙個問題有好多種思路去解決,之前自己考慮的都太普遍性,應當多樣化的來思考問題

最深體會:寫出實現功能的**,和寫出優異的**是兩回事!

1.鍊錶的倒敘列印

(1)是否可以改變鍊錶結構,可以改變就改變以後列印

(2)不允許改變鍊錶結構可以直接使用迴圈,但是時間複雜度會是o(n)

(3)使用棧來儲存,那麼就會簡單很多,只需要o(n)的時間複雜度

(4)由遞迴和迴圈的關係不難想出其實遞迴也可以解決該問題

用棧解決的方案

void list::resstashow()

while (!s.empty())

}

2.重建二叉樹

輸入二叉樹的前序遍歷和中序遍歷的,請重建出該二叉樹。

12473568

47215386

**如下,輸出函式順序是前序

本題重點

掌握遞迴思想,熟悉前序和中序關係

注意

我的**只實現了兩字元順序匹配的情況,那麼不匹配的時候應當如何呢?

應該加乙個判斷函式,判斷這兩個是否是合適的字串

如果說根節點是null呢?

如果說是特殊的二叉樹呢?

binarytreenode* rebulit(int str1, int str2, int

length)

binarytreenode* p = (binarytreenode*)malloc(sizeof(binarytreenode));

p->m_nvalue = str1[0];

p->m_pleft = null;

p->m_pright = null;

if (length == 1)

int i = 0;

for (i; i < length; ++i)//i=0

}p->m_pleft = rebulit(&str1[1], str2, i);

if (i + 1

< length)

else

return p;

}void rebuilttree(binarytreenode **root, int str1, int str2, int

length)

}p->m_pleft = rebulit(&str1[1], str2, i);

if (i + 1

< length)

}void show(binarytreenode *first)

printf("%d ", first->m_nvalue);

show(first->m_pleft);

show(first->m_pright);

}

3.兩個棧實現佇列(這裡用的是c++懶得寫棧)

#include 

#include

using

namespace

std;

class queue

int front()//這個函式想要加判斷的,但是加的話必須返回乙個值,所以就先暫定-1吧,因為我試了下系統的他貌似也是直接報錯,讓執行錯誤

change(&p1, &p2);

int tmp = p2.top();

change(&p2, &p1);//為了可以持續使用變換完了以後還得變回來

return tmp;

}void pop()//注意刪除完了的判斷

change(&p1, &p2);

p2.pop();

change(&p2, &p1);

}private:

stack

p1;

stack

p2;

void change(stack

*p1, stack

*p2)//把p1的值完全放到p2

}};int main()

for (int i = 0; i < 10; ++i)

return

0;}

相應的兩個佇列實現乙個棧的思想其實是一樣的,先進先出換成後進先出罷了。

面試 資料結構

先給出定義部分和相關除錯部分 include h using namespace std struct listnode head listnode insert int v while p next null p p next p next new listnode p p next p next...

《面試》資料結構 python

思想 只限定在資料棧的一端 棧頂 進行元素的操作,是一種特殊的線性表。操作例項 二進位制轉換十進位制 class structure object deftwooten self,l m i len l while i 0 n l i 1 pow 2,len l i i i 1 print sum ...

2019 面試 資料結構

二叉樹是資料結構中一種重要的資料結構,也是樹表家族最為基礎的結構。二叉樹的定義 二叉樹的每個結點至多只有二棵子樹 不存在度大於2的結點 二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至多有2i 1個結點 深度為k的二叉樹至多有2k 1個結點 對任何一棵二叉樹t,如果其終端結點數為n0,度為2的...