LeetCode 94二叉树中序遍历:TreeNode与数组输入的疑问
LeetCode 94二叉树中序遍历疑问解答
1. 传入辅助函数的root是如何构造成二叉树的?
LeetCode后台会自动把你输入的数组格式测试用例转换成TreeNode实例组成的二叉树。举个例子,如果你输入[1,null,2,3],后台会按以下逻辑构建:
- 先创建根节点
TreeNode(1) - 处理数组后续元素,将
null视为空节点,给根节点的right属性赋值为TreeNode(2) - 再给节点2的
left属性赋值为TreeNode(3)
整个过程通过递归或队列(层次遍历)完成,最终得到的root就是这棵树的根节点对象。
2. path函数中的node为何不是数组却拥有left、right属性?
因为你代码里接收的root参数本身就是TreeNode类的实例,不是数组。LeetCode后台已经帮你完成了数组到TreeNode树结构的转换,所以递归时传入的node自然是TreeNode对象,自带val、left、right这些属性——不需要你显式调用TreeNode构造函数,后台已经替你做了这件事。
3. 数组形式下的索引规则,为何代码里不用传索引?
数组里的索引规则是从数组构建二叉树的逻辑,而这个构建过程是LeetCode后台完成的。后台会用层次遍历(BFS)的方式,借助队列把数组元素转换成一个个TreeNode节点,并且把父节点和子节点的关系转换成对象引用(比如父节点的left直接指向左子节点对象)。所以你的代码拿到的是已经构建好的树,每个节点的left/right已经直接指向对应的子节点,不需要你再通过索引去计算,直接访问属性即可。
内容的提问来源于stack exchange,提问作者Edris Elbow
相关产品推荐
相关产品推荐

