问题
分析
递归很简单;
O(n)空间复杂度的迭代也很简单;
说一下常数空间复杂度的迭代实现:
在循环过程中,共有三个变量:root,指向当前根节点,用于将左右子树的next关系连接;
当前层:是root的子节点层;
tempNode,指向当前层的第一个节点;其next指针指向root层第一个节点的左节点;
currNode,指向当前需要确定next关系的节点;
该方法层次遍历树,借助root的next关系访问到该层的下一个节点;借助currNode的移动,建立next关系。
具体可以看代码。
时间复杂度:O(n)?(notsure,就是树的节点数吧)
空间复杂度:O(1)
代码
public void connect3(TreeLinkNode root) {
//迭代实现 常数空间 抄袭别人的
if(root==null) return ;
while(root!=null){
TreeLinkNode tempNode=new TreeLinkNode(0);
TreeLinkNode currNode=tempNode;
while(root!=null){
if(root.left!=null){
currNode.next=root.left;
currNode=currNode.next;
}
if(root.right!=null){
currNode.next=root.right;
currNode=currNode.next;
}
root=root.next;
}
root=tempNode.next;
}
}