zoukankan      html  css  js  c++  java
  • 带parent指针的successor求解

    题目:

      给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点(不存在重复数据)。树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

        

    思路:

      如果当前节点有右孩子,则下一个节点是右孩子中最左子节点。如果当前节点是其父节点的左子节点,则下一个节点就是父节点(节点没有右孩子)。如果当前节点是父节点的右子节点(节点没有右孩子),下一个节点:父节点是其父节点的左孩子。最后没找到的话 就说明这是最后一个,不存在他的下一个了。

    代码:

    /*有parent的解法*/
    public class Successor0 {
        public TreeNode<Integer> findSuccessor(TreeNode<Integer> node) {
            if (node == null)
                return null;
            if (null != node.right) {
                return minOfRight(node.right);
            } else {
                TreeNode<Integer> p = node;
                while (p.parent != null && p == p.parent.right) {
                    p = p.parent;
                }
                return p.parent;
            }
        }
    
        private TreeNode<Integer> minOfRight(TreeNode<Integer> right) {
            TreeNode<Integer> p = right;
            while (p.left != null)
                p = p.left;
            return p;
        }
    
        public static class TreeNode<T> {
    
            public T val;
            public TreeNode<T> left = null;
            public TreeNode<T> right = null;
            public TreeNode<T> parent = null;
    
            public TreeNode(T val) {
                this.val = val;
            }
    
        }
    }
  • 相关阅读:
    Jquery揭秘系列:实现$.fn.extend 和$.extend函数
    小谈Jquery框架
    js实现可拖动Div
    WebApp 九宫格抽奖简易demo
    原生js实现autocomplete插件
    扩展RadioButtonListFor和CheckBoxListFor
    关于js的回调函数的一点看法
    原生js实现fadein 和 fadeout
    QlikView sheet权限
    asp.net MVC 文件流导出Excel
  • 原文地址:https://www.cnblogs.com/xiaoyh/p/10408427.html
Copyright © 2011-2022 走看看