二叉树的下一个结点
2017-12-05 15:09
323 查看
题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路一:
*若二叉树为空,则返回空
*若结点的右孩子存在,则设置一个指针从该结点的右孩子出发,一直沿着指向左子结点的指针找到的叶子结点即为下一个结点
*若结点的右孩子不存在,且结点不是根节点。如果该结点是其父结点的左孩子,则返回父结点;否则继续向上遍历其父结点的父结点,重复之前的判断,返回结果。
思路二:
*先找到根结点
*按照中序遍历将结点依次加入列表中
import java.util.ArrayList;
public class Solution {
public TreeLinkNode GetNext(TreeLinkNode pNode)
{
if (pNode == null)
return null;
ArrayList<TreeLinkNode> list = new ArrayList<>();
TreeLinkNode root = pNode;
while (root.next != null)
root = root.next;
inorder(root, list);
for (int i = 0; i < list.size() - 1; i++)
{
if (list.get(i) == pNode)
return list.get(i + 1);
}
return null;
}
private void inorder(TreeLinkNode root, ArrayList<TreeLinkNode> list)
{
if (root == null)
return;
inorder(root.left, list);
list.add(root);
inorder(root.right, list);
}
}
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 == null) return null; if (pNode.right != null) { pNode = pNode.right; while (pNode.left != null) pNode = pNode.left; return pNode; } while (pNode.next != null) { TreeLinkNode root = pNode.next; if (root.left == pNode) return root; pNode = pNode.next; } return null; } }
思路二:
*先找到根结点
*按照中序遍历将结点依次加入列表中
import java.util.ArrayList;
public class Solution {
public TreeLinkNode GetNext(TreeLinkNode pNode)
{
if (pNode == null)
return null;
ArrayList<TreeLinkNode> list = new ArrayList<>();
TreeLinkNode root = pNode;
while (root.next != null)
root = root.next;
inorder(root, list);
for (int i = 0; i < list.size() - 1; i++)
{
if (list.get(i) == pNode)
return list.get(i + 1);
}
return null;
}
private void inorder(TreeLinkNode root, ArrayList<TreeLinkNode> list)
{
if (root == null)
return;
inorder(root.left, list);
list.add(root);
inorder(root.right, list);
}
}
相关文章推荐
- 二叉树的下一个结点
- 《剑指offer》二叉树的下一个结点
- 二叉树的下一个结点
- 二叉树的下一个结点
- 输出二叉树中中序遍历中给定结点的下一个结点
- 剑指Offer——二叉树的下一个结点
- 面试题58-二叉树的下一个结点
- 树:二叉树的下一个结点
- 二叉树的下一个结点
- 二叉树的下一个结点
- 二叉树的下一个结点(二叉树中序遍历的使用)
- 剑指offer面试题[58]-二叉树的下一个结点
- 二叉树的下一个结点
- 面试题58:二叉树的下一个结点
- 剑指offer——二叉树的下一个结点(好题)
- 剑指offer—二叉树的下一个结点
- 二叉树的下一个结点+对称二叉树
- 剑指offer52--找到二叉树下一个结点
- 【剑指Offer学习】【面试题58:二叉树的下一个结点】
- 剑指offer(54)-二叉树的下一个结点