本文主要是介绍【打卡第243道】【二叉树】【剑指Offer】:JZ8 二叉树的下一个结点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、题目描述
2、算法分析
既然是找中序遍历的某一个结点的下一个结点,其实思路已经很明确了。
1、将二叉树中序遍历,存储到集合中。前提,首先找到根节点。根节点可以根据指向父节点的next指针找到。
2、找到根节点后,遍历集合,找到pNode == list.get(i),的那个元素。
注意:如果pNode是最后一个元素的话,下一个元素肯定为null;
如果pNode不是最后一个元素,返回list,get(i+1)
3、代码实现
/*
public class TreeLinkNode {int val;TreeLinkNode left = null;TreeLinkNode right = null;TreeLinkNode next = null;TreeLinkNode(int val) {this.val = val;}
}
*/
/*既然是找中序遍历的某一个结点的下一个结点,其实思路已经很明确了。1、将二叉树中序遍历,存储到集合中。前提,首先找到根节点。根节点可以根据指向父节点的next指针找到。2、找到根节点后,遍历集合,找到pNode == list.get(i),的那个元素。注意:如果pNode是最后一个元素的话,下一个元素肯定为null;如果pNode不是最后一个元素,返回list,get(i+1)
*/
import java.util.ArrayList;
public class Solution {ArrayList<TreeLinkNode> list = new ArrayList<>();public TreeLinkNode GetNext(TreeLinkNode pNode) {TreeLinkNode par = pNode;while(par.next != null){par = par.next;}inOrder(par);for(int i = 0;i < list.size();i++){if(pNode == list.get(i)){if(i == list.size() - 1){return null;}else{return list.get(i + 1);}}}return null;}// 中序遍历public void inOrder(TreeLinkNode pNode){if(pNode != null){inOrder(pNode.left);list.add(pNode);inOrder(pNode.right);}}
}
这篇关于【打卡第243道】【二叉树】【剑指Offer】:JZ8 二叉树的下一个结点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!