给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 ① 如果一个节点的右子树不为空,那么该节点的下一个节点是右子树的最左节点;
题目描述
public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode next = null; TreeLinkNode(int val) { this.val = val; } }
解题思路
判断右节点是否为空
② 否则,向上找第一个左链接指向的树包含该节点的祖先节点。/* 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) { if(pNode.right != null) { TreeLinkNode node = pNode.right; while(node.left != null) node = node.left; return node; }else { while(pNode.next != null) { TreeLinkNode parens = pNode.next; if(parens.left == pNode) return parens; pNode = pNode.next; } } return null; } }
借助列表递归
static ArrayList<TreeLinkNode> a=new ArrayList<>(); public static void InOrder(TreeLinkNode pRoot){ if (pRoot != null) { InOrder(pRoot.left); a.add(pRoot); InOrder(pRoot.right); } } public TreeLinkNode GetNext(TreeLinkNode pNode) { TreeLinkNode p=pNode; int i; while (pNode.next!=null) { pNode=pNode.next; } InOrder(pNode); for( i=0;i<a.size();i++) { if(p==a.get(i)) { return i == a.size()-1?null:a.get(i+1); } } return null; }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算