程序员面试金典——寻找下一个结点
来源:互联网 发布:mac flash player 编辑:程序博客网 时间:2024/04/25 14:42
题目描述
请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继)。
给定树的根结点指针TreeNode* root和结点的值int p,请返回值为p的结点的后继结点的值。保证结点的值大于等于零小于等于100000且没有重复值,若不存在后继返回-1。
方法1:
思路:通过非递归的中序遍历的方法(迭代)。通过栈的方法 可以立刻返回。
import java.util.*;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Successor { public int findSucc(TreeNode root, int p) { // write code here if(root==null)return -1; Stack <TreeNode> stack = new Stack<>(); boolean start = false; TreeNode cur =root; while(cur!=null||!stack.isEmpty()){ //将左子结点放入 while(cur!=null){ stack.push(cur); cur = cur.left; } //取出当前结点并判定 cur = stack.pop(); if(start)return cur.val; if(cur.val==p)start=true; //最后放入右子结点 cur = cur.right; } return -1; }}
方法2:
直接递归中序遍历,然后加所有值按顺序存到栈中。
最后遍历栈,返回与值相等的后面一个数。
import java.util.*;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Successor { public int findSucc(TreeNode root, int p) { // write code here if(root==null)return -1; Stack <Integer> stack = new Stack<>(); inorder(root,stack); boolean start = false; for(Integer i : stack){ if(start)return i; if(p==i)start =true; } return -1; } public void inorder(TreeNode root,Stack<Integer>stack){ if(root.left!=null)inorder(root.left,stack); stack.push(root.val); if(root.right!=null) inorder(root.right, stack); }}
0 0
- 程序员面试金典——寻找下一个结点
- 程序员面试金典--面试22之寻找二叉树中指定结点的下一个结点
- 程序员面试金典:检查是否为BST、寻找下一个结点
- 程序员面试金典-4.6寻找下一个节点
- 程序员面试金典——下一个较大元素
- 程序员面试金典: 9.4树与图 4.6找出二叉查找树指定结点的下一个结点
- 《程序员面试金典》--寻找二叉树中某个节点中序遍历的下一个节点
- 牛客网 | 寻找下一个结点
- 寻找下一个结点
- 寻找下一个结点
- 寻找下一个结点
- 寻找下一个结点
- 程序员面试金典——输出单层结点
- 程序员面试金典——输出单层结点
- 程序员面试金典:下一个最大元素
- 程序员面试经典--二叉查找树节点的“下一个结点”
- 《程序员面试金典》输出单层结点
- 程序员面试金典——链表中倒数第k个结点
- LeetCode:Longest Palindromic Substring
- 【剑指Offer】重建二叉树 解题报告
- VR系列——Oculus Rift 介绍指南:二、建议的规格
- CentOS 7上安装apache
- iOS之UIPickerView使用(一)
- 程序员面试金典——寻找下一个结点
- 安全
- [IOS APP] 夜听刘筱
- 河南省第六届ACM程序设计大赛(共7道,目前只做了三道。待续)
- shell 编程——for in 循环
- qt连接mysql数据库以及txt文本的复制操作
- java <<(左移位) 与 >>(右移位)
- CF
- bootstrap-datetimepicker的引入