2021-3-25 二叉树题目

101. 对称二叉树

使用递归的方法求解:

首先如果根节点为空,返回是对称的,

如果根节点不为空,则判断左子数和右子树是不是镜像对称的,判断方法是先判断左子数和右子树根节点是否相同,再判断左子数的左孩子和右子树的右孩子;左子数的右孩子和右子树的左孩子是否对称;

据此写出递归的伪代码:

函数a(左子树,右子树,返回是否对称) 判断判断左子数和右子树根节点是否相同以及a(左子数的左孩子和右子树的右孩子) a(左子数的右孩子和右子树的左孩子) 只有都返回为真值才能认为对称。

迭代求解思路:

引入队列是将递归改为迭代的常用方法,将根节点两次加入队列,然后将左子数根节点右子树根节点加入队列,然后按照顺序将左子树的左节点和右子树的右节点,左子树的右节点和右子树的左节点加入队列,两两判断队列元素是否相等。直到发现不相等元素或者队列为空返回。

543. 二叉树的直径

注:因为这道题没有规定一定要过根节点,所以要遍历所有的节点,找到以这个节点为根节点的最长直径。这些路径的最大值就是这颗树的最长路径。

以当前节点为根节点的最长路径长度等于其左孩子为根的子树深度+右孩子为根的子树深度。

据此写出伪代码:

定义一个全局变量最大值 ans=0;

def 函数1()

{
      if(root==null){   return 0;}

      else{ dfs(root); return max}

}

def dfs(node){

       if(node==null){ return 0;}

       else{

              L=dfs(node.left) //获得左子树高度

              R=dfs(node.right)//获得右子树高度

              ans=Math.max(ans,L+R);

              return Math.max(L,R);//返回当前结点为根的高度

              }

       }

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值