劍指offer js編寫 樹

2022-01-21 23:09:20 字數 1812 閱讀 8525

(1)

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

思路:首先找到a中結點的值與b相等的結點,然後從這兩個相同的結點出發,判斷是否存在重合,若是返回true。否則,在樹a的左右子樹中尋找與b結點值相同的結點,以這些結點出發遞迴判斷是否是a的子樹。

/* function treenode(x) */

function hassubtree(proot1, proot2)

var flag = false;

if(proot1.val == proot2.val)

if(!flag)

return flag;  

}function subtree(proot1,proot2)

if(proot1 == null && proot2!=null)

if(proot1.val == proot2.val)

return false;

}(2)操作給定的二叉樹,將其變換為源二叉樹的映象。

二叉樹的映象定義:源二叉樹 

8/ \

6 10

/ \ / \

5 7 9 11

映象二叉樹

8/ \

10 6

/ \ / \

11 9 7 5

思路:二叉樹的映象樹,通過上圖可以看出,從根結點出發(先序遍歷思想),先交換根結點的孩子,再依次遞迴交換左子樹、右子數。

/* function treenode(x) */

function mirror(root)

var temp=root.right;

root.right=root.left;

root.left=temp;

mirror(root.left);

mirror(root.right);

return root;

}(3)從上往下列印出二叉樹的每個節點,同層節點從左至右列印。

思路:二叉樹的層次遍歷,借用兩個陣列即可。

/* function treenode(x) */

function printfromtoptobottom(root)

dequetree.push(root);

while(dequetree.length)

return result;

}(4)輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。

解析:對於一棵二叉排序樹,存在特點:根結點的左子樹都小於根結點,根結點的右子數都大於根結點。後序遍歷最後訪問的是根結點,因此,對於乙個整數

陣列,最後乙個元素肯定是根結點,並且如果前部分(左子樹)都小於最後乙個元素(根結點),後部分(右子樹)都大於最後乙個元素(根結點)。遞迴判

斷前部分和後部分是否是二叉排序樹。

function verifysquenceofbst(sequence)

return jurge(sequence,0,sequence.length-1);

function jurge(sequence,first,last)

if(temp2==last)

return true;

if(temp2!=last)

return false;   

var a1=jurge(sequence,first,temp1);

var a2=jurge(sequence,temp1+1,last-1);

return a1&&a2; }}

劍指offer js實現剪繩子

題目 給你一根長度為n的繩子,請剪成m段n 1,m 1,使剩下的繩子乘積為最大值.例 8 2 3 3 18 思路 動態規劃,比如8,第一次切割可以分成8 1種切法,將最優解儲存起來。let n 8 function cut if res n return res n let max 0 for le...

劍指offer js 其中10題

11.進製位運算 輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。function numberof1 n return count 12.正負數迴圈 給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。保證base和exp...

劍指offer JS題解 10 矩形覆蓋

我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?n 3時,2 3的矩形塊有3種覆蓋方法。依然是斐波那契數列,首先考慮起始的情況 當n 1時,只有一種覆蓋方法 當n 2時,可以全橫或者全豎,有兩種覆蓋方法 當n 2時,無非...