算法题_判断两个二叉树是否相同
判断两个二叉树是否相等(递归+非递归)_卜大爷的博客-CSDN博客_判断两棵二叉树是否相等算法
# 树的节点类
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def isSameTree(p: TreeNode, q: TreeNode) -> bool:
# 两者都为None则返回True
if not p and not q:
return True
# 其中一个为None则返回False
if not p or not q:
return False
# 都不为None则比较值
if p.val != q.val:
return False
# 对左右子树分别进行递归比较
return isSameTree(p.left, q.left) and isSameTree(p.right, q.right)
JS实现堆排序
JS实现堆排序_banggan的博客-CSDN博客_js堆排序
/**
*
*@Description:堆排序
*@param arr
*@author 肖芳
*/
function headSort(arr){
buildHeap(arr);//构建堆
var len = arr.length;
for(var i=len-1;i>0;i--){
swap(arr,0,i);//交换堆的第一个元素和最后一个元素
heapify(arr,i);//调整堆
}
return arr;
}
/**
*
*@Description:创建堆
*@param arr
*@author 肖芳
*/
function buildHeap(arr){
var len = arr.length;
if(len == 0)
return;
for(var i=Math.floor(len/2);i>0;i--){
heapify(arr,i);
}
}
/**
*
*@Description:调整堆
*@param arr 调整数组
*@param i 跟
*@author 肖芳
*/
function heapify(arr,i){
var left = 2*i+1;
var right = 2*i+2;
var largest = i;
var len = arr.length;
if(left <len && arr[left]>arr[largest]){//先判断左节点还否超出
largest=left;
}
if(right <len && arr[right]>largest){//有节点是否超出 找出最大的子节点
largest=right;
}
if(largest != i){
swap(arr,i,largest);//交换 largrst为i
heapify(arr,largest);//递归调整
}
}
/**
*
*@Description:交换
*@param arr
*@author 肖芳
*/
function swap(arr,i,j){
var temp=arr[i];
arr[i] = arr[j];
arr[j] = temp;
}