5.6dj

算法题_判断两个二叉树是否相同

 判断两个二叉树是否相等(递归+非递归)_卜大爷的博客-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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值