我在二叉树中找到最后一个元素(最右边的孩子)时遇到了一些麻烦.
这是我到目前为止:
public Node findLastElement(Node root) {
Node x = root;
if (x != null)
findLastElement(x.right);
return x;
}
如果我打印元素,打印的最后一个元素是最后一个元素,但我似乎无法“获得”该元素.当我尝试在循环后返回x时,我得到一个nullpointer.如何保存最后一个元素并将其返回?
解决方法:
您可以递归地获取最右边的元素:
public Node findLastElement(Node root) {
if (root == null) {
return null;
}
if (root.right == null) {
return root;
}
return findLastElement(root.right);
}
你也可以迭代地做.迭代通常在内存方面更好,因为它没有使用递归创建的额外堆栈帧.
public Node findLastElement(Node root) {
if(root == null) {
return null;
}
Node x = root;
while(x.right != null) {
x = x.right;
}
return x;
}
并且不需要临时变量x.由于java通过值传递引用(它们是原始引用的副本),因此我们对输入参数root进行的任何赋值都是本地的,并且不会在findLastElement方法之外反映.
public Node findLastElement(Node root) {
if(root == null) {
return null;
}
while(root.right != null)
root = root.right;
return root;
}
标签:java,recursion,binary-tree 来源: https://codeday.me/bug/20190715/1466936.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。