题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
解析:比较暴力的解法是根据给出的结点,找到二叉树的根节点,再根据二叉树的中序遍历,找到和给出的结点相同的结点并作标记,下一次的结点输出即是答案。若遍历完成都没有找到,返回null。重点考察二叉树的中序遍历。
import java.util.Stack;
/*
public class TreeLinkNode {
int val;
TreeLinkNode left = null;
TreeLinkNode right = null;
TreeLinkNode next = null;
TreeLinkNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public TreeLinkNode GetNext(TreeLinkNode pNode) {
Stack<TreeLinkNode> stack=new Stack<>();
TreeLinkNode pnode=pNode;
boolean q=false;
while(pnode.next!=null){
pnode=pnode.next;
}
TreeLinkNode node=pnode;
while(node!=null || !stack.isEmpty()){
while(node!=null){
stack.push(node);
node=node.left;
}
if(!stack.isEmpty()){
node=stack.pop();
if(q==true)return node;
if (pNode==node){
q=true;
}
node=node.right;
}
}
return null;
}
}