劍指offer 26 30記錄

2021-10-03 16:53:03 字數 3503 閱讀 4054

輸入兩棵二叉樹a和b,判斷b是不是a的子結構。(約定空樹不是任意乙個樹的子結構)

b是a的子結構, 即 a中有出現和b相同的結構和節點值。

例如:給定的樹 a:

3/ \

4   5

/ \1   2

給定的樹 b:4 /

1返回 true,因為 b 與 a 的乙個子樹擁有相同的結構和節點值。

示例 1:

輸入:a = [1,2,3], b = [3,1]

輸出:false

示例 2:

輸入:a = [3,4,5,1,2], b = [4,1]

輸出:true

思路:遍歷樹(前中後都可以,不影響),對每個結點判斷是否是子樹。

唯一要注意的是定義:

就算圖中的1還有左右孩子,依舊算匹配成功。

/**

* definition for a binary tree node.

* public class treenode

* }*//**

* definition for a binary tree node.

* public class treenode

* }*/class solution

return issub(a,b) || issubstructure(a.left,b) || issubstructure(a.right,b);

}//判斷是否是子樹

public boolean issub(treenode a, treenode b)

if(a == null && b != null)

if(a.val == b.val)

return false;}}

請完成乙個函式,輸入乙個二叉樹,該函式輸出它的映象。

例如輸入:

4/   \

2     7

/ \   / \

1   3 6   9

映象輸出:

4/   \

7     2

/ \   / \

9   6 3   1

示例 1:

輸入:root = [4,2,7,1,3,6,9]

輸出:[4,7,2,9,6,3,1]

思路,找遞迴定義。

/**

* definition for a binary tree node.

* public class treenode

* }*/class solution

treenode temp=root.left;

root.left=root.right;

root.right=temp;

mirrortree(root.left);

mirrortree(root.right);

return root;}}

請實現乙個函式,用來判斷一棵二叉樹是不是對稱的。如果一棵二叉樹和它的映象一樣,那麼它是對稱的。

例如,二叉樹 [1,2,2,3,4,4,3] 是對稱的。

1/ \

2   2

/ \ / \

3  4 4  3

但是下面這個 [1,2,2,null,3,null,3] 則不是映象對稱的:

1/ \

2   2

\   \

3    3

示例 1:

輸入:root = [1,2,2,3,4,4,3]

輸出:true

示例 2:

輸入:root = [1,2,2,null,3,null,3]

輸出:false

思路:遞迴判斷

/**

* definition for a binary tree node.

* public class treenode

* }*/class solution

return help(root.left,root.right);

}public boolean help(treenode node1,treenode node2)

if(node1==null || node2==null)

return node1.val==node2.val && help(node1.left,node2.right) && help(node1.right,node2.left);}}

輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。

示例 1:

輸入:matrix = [[1,2,3],[4,5,6],[7,8,9]]

輸出:[1,2,3,6,9,8,7,4,5]

示例 2:

輸入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]

輸出:[1,2,3,4,8,12,11,10,9,5,6,7]

限制:0 <= matrix.length <= 100

0 <= matrix[i].length <= 100

思路:一圈一圈往裡列印。順時針

class solution     

return ans;}}

定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的 min 函式在該棧中,呼叫 min、push 及 pop 的時間複雜度都是 o(1)。

示例:minstack minstack = new minstack();

minstack.push(-2);

minstack.push(0);

minstack.push(-3);

minstack.min();   --> 返回 -3.

minstack.pop();

minstack.top();      --> 返回 0.

minstack.min();   --> 返回 -2.

各函式的呼叫總次數不超過 20000 次

思路:拿另外乙個棧同步記錄當前最即可。

class minstack 

public void push(int x)

public void pop()

public int top()

public int min()

}/**

* your minstack object will be instantiated and called as such:

* minstack obj = new minstack();

* obj.push(x);

* obj.pop();

* int param_3 = obj.top();

* int param_4 = obj.min();

*/

繼續劍指offer,26 30

題目描述 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 題目分析 這套題非常難,這個方法我自己估計是想不出,所以就把之前的拷貝過來,這套...

劍指offer筆試題26 30

題目描述 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 正確的思路 首先對每個結點進行複製,並插入到原有結點的後面。第二步再逐個將新結點...

記錄劍指offer

1.四種與型別轉換相關的關鍵字 p23 type conversions 2.單例模式設計 p32 todo 單例模式設計 在真實的面試中有被問到過 餓漢式 多執行緒安全 餓漢式 在定義例項的時候就去new物件 以空間換時間 class csingleton private class garbag...