コード例 #1
0
        //BFS using queue
        public static void ConnectQueue(TreeLinkNode root)
        {
            if (root == null)
            {
                return;
            }
            var queue = new Queue <TreeLinkNode>();
            var temp  = root;

            queue.Enqueue(temp);
            while (queue.Count != 0)
            {
                temp = queue.Dequeue();
                if (temp.left != null)
                {
                    temp.left.next = temp.right;
                    queue.Enqueue(temp.left);
                    queue.Enqueue(temp.right);
                    if (temp.next != null)
                    {
                        temp.right.next = temp.next.left;
                    }
                }
            }
        }
 //DFS recursive
 public static void ConnectRecursive(TreeLinkNode root)
 {
     if (root == null) return;
     if (root.left != null)
     {
         root.left.next = root.right;
         if (root.next != null) root.right.next = root.next.left;
     }
     ConnectRecursive(root.left);
     ConnectRecursive(root.right);
 }
        public void TestMethodConnectRecursive()
        {
            var tree = new TreeLinkNode(0);
            tree.left = new TreeLinkNode(1);
            tree.right = new TreeLinkNode(2);
            tree.left.left = new TreeLinkNode(3);
            tree.left.right = new TreeLinkNode(4);
            tree.right.left = new TreeLinkNode(5);
            tree.right.right = new TreeLinkNode(6);

            ConnectSolution.ConnectRecursive(tree);
            Assert.AreEqual("[0,#,1,2,#,3,4,5,6,#]", tree.ToString());
        }
コード例 #4
0
 //DFS recursive
 public static void ConnectRecursive(TreeLinkNode root)
 {
     if (root == null)
     {
         return;
     }
     if (root.left != null)
     {
         root.left.next = root.right;
         if (root.next != null)
         {
             root.right.next = root.next.left;
         }
     }
     ConnectRecursive(root.left);
     ConnectRecursive(root.right);
 }
 //BFS using queue
 public static void ConnectQueue(TreeLinkNode root)
 {
     if (root == null) return;
     var queue = new Queue<TreeLinkNode>();
     var temp = root;
     queue.Enqueue(temp);
     while (queue.Count != 0)
     {
         temp = queue.Dequeue();
         if (temp.left != null)
         {
             temp.left.next = temp.right;
             queue.Enqueue(temp.left);
             queue.Enqueue(temp.right);
             if (temp.next != null) temp.right.next = temp.next.left;
         }
     }
 }
コード例 #6
0
 public TreeLinkNode(int val)
 {
     this.val = val;
     left     = right = next = null;
 }
 public TreeLinkNode(int val)
 {
     this.val = val;
     left = right = next = null;
 }