輸入兩棵二叉樹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...