示例#1
0
 public TreeNode2(int _val, TreeNode2 _left, TreeNode2 _right, TreeNode2 _next)
 {
     val   = _val;
     left  = _left;
     right = _right;
     next  = _next;
 }
示例#2
0
        /// <summary>
        /// 给定一棵二叉树,返回它的自左向右同级连接
        /// </summary>
        /// <param name="root"></param>
        /// <returns></returns>
        public TreeNode2 Connect2(TreeNode2 root)
        {
            Dictionary <int, TreeNode2> layersDict = new Dictionary <int, TreeNode2>();

            DoRecursionByConnect2(root, 1, layersDict);
            return(root);
        }
示例#3
0
        /// <summary>
        /// 给定一棵perfect tree,要求自左向右连接它的同层
        /// </summary>
        /// <param name="root"></param>
        /// <returns></returns>
        public TreeNode2 Connect(TreeNode2 root)
        {
            TreeNode2         doRoot  = root;
            Queue <TreeNode2> doQueue = new Queue <TreeNode2>();

            if (root != null)
            {
                doQueue.Enqueue(root);
                int loopNum = 1;
                while (doQueue.Count > 0)
                {
                    TreeNode2 tmp1 = doQueue.Dequeue();
                    for (int i = 1; i < loopNum; i++)
                    {
                        TreeNode2 tmp2 = doQueue.Dequeue();
                        tmp1.next = tmp2;
                        if (tmp1.left != null)//due to the defination
                        {
                            doQueue.Enqueue(tmp1.left);
                            doQueue.Enqueue(tmp1.right);
                        }
                        tmp1 = tmp2;
                    }
                    if (tmp1.left != null)
                    {
                        doQueue.Enqueue(tmp1.left);
                        doQueue.Enqueue(tmp1.right);
                    }
                    loopNum = loopNum << 1;
                }
            }
            return(root);
        }
示例#4
0
 private void DoRecursionByConnect2(TreeNode2 root, int depth, Dictionary <int, TreeNode2> layersDict)
 {
     if (root == null)
     {
         return;
     }
     if (!layersDict.ContainsKey(depth))
     {
         layersDict.Add(depth, root);
     }
     else
     {
         layersDict[depth].next = root;
         layersDict[depth]      = root;
     }
     DoRecursionByConnect2(root.left, depth + 1, layersDict);
     DoRecursionByConnect2(root.right, depth + 1, layersDict);
 }