开发者社区> 问答> 正文

二叉树的遍历问题

最近在做leetcode上的题目,有一道题是要求交换二叉树左右子树。我一开始没有在函数体中加入如下代码:
`

      if(root == null)
         return null;

`
结果发现出现空指针异常。我觉得上面这段代码有点多余,但是OJ缺了它通过不了。下面贴上整个程序的代码:

public class TreeNode {
          int val;
          TreeNode left;
          TreeNode right;
          TreeNode(int x) { val = x; }
     
     public TreeNode invertTree(TreeNode root){
         if(root == null)
             return null;
         if(root.left == null && root.right == null)
             return root;
         
         TreeNode temp = root.left;
         root.left = root.right;
         root.right = temp;
         
         if(root.left != null)
             invertTree(root.left);
         
         if(root.right != null)
             invertTree(root.right);
         
         return root;
     }
}

展开
收起
蛮大人123 2016-03-05 16:54:33 2758 0
2 条回答
写回答
取消 提交回答
  • 二叉树的遍历分为以下三种: 先序遍历:遍历顺序规则为【根左右】 中序遍历:遍历顺序规则为【左根右】 后序遍历:遍历顺序规则为【左右根】 什么是【根左右】?就是先遍历根,再遍历左孩子,最后遍历右孩子;
    2019-07-17 18:53:48
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪

    你添加代码,第一句代码是
    `if(root.left == null && root.right == null)
    return root;`
    如果传递参数是null.那么root.left. 因为root是null ,调用left属性是报了异常
    如果你屏蔽了异常那么.root.left==null 是true.
    我猜代码应该是这样的.

    try{
    invertTree(null);  //调用,
    }catch{
    create();  //创建树的根节点方法
    }
    2019-07-17 18:53:48
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载