题目描述
https://www.nowcoder.com/practice/9023a0c988684a53960365b889ceaf5e
思路:
要找到中序遍历的下一个节点,可以直接进行中序遍历,然后在中序遍历中找到根节点的位置,在返回他的下一个位置即可
题目说传入的pnode是局部子树,我们不能肯定就是父节点,所以我们要寻找父节点,因为其他节点的next指针都指向他的父节点,那么我们只要找到next=null的结点就是父节点
/*
public class TreeLinkNode {
int val;
TreeLinkNode left = null;
TreeLinkNode right = null;
TreeLinkNode next = null;
TreeLinkNode(int val) {
this.val = val;
}
}
*/
import java.util.*;
public class Solution {
ArrayList<TreeLinkNode>nodes=new ArrayList<TreeLinkNode>();
public TreeLinkNode GetNext(TreeLinkNode pNode) {
// 首先进行中序遍历
// 然后找到根节点的位置
// 在输出下一个数就是
TreeLinkNode root=pNode;
//要找到父节点
while(root.next!=null)root=root.next;
Inorder(root);
int n=nodes.size();
System.out.println(n);
for(int i=0;i<n-1;i++){
TreeLinkNode tmp=nodes.get(i);
System.out.print(tmp.val);
if(pNode==tmp){
return nodes.get(i+1);
}
}
return null;
}
// 中序遍历
void Inorder(TreeLinkNode root){
if(root!=null ){
Inorder(root.left);
nodes.add(root);
Inorder(root.right);
}
}
}