本文概述
- C ++
- Java
- Python3
- C#
- C ++
At each node, link children of same parent from left to right.
Parent should be linked with only first child.
例子:
Left Child Right Sibling tree representation
10
|
2 ->
3 ->
4 ->
5
||
67 ->
8 ->
9
先决条件:
树的左儿童右同级表示
【算法(创建一个具有左-子-右-兄弟表示的树)】下面是实现。
C ++
//CPP program to create a tree with left child
//right sibling representation.
#include<
bits/stdc++.h>
using namespace std;
struct Node
{
int data;
struct Node *next;
struct Node *child;
};
//Creating new Node
Node* newNode( int data)
{
Node *newNode = new Node;
newNode->
next = newNode->
child = NULL;
newNode->
data = https://www.lsbin.com/data;
return newNode;
}//Adds a sibling to a list with starting with n
Node *addSibling(Node *n, int data)
{
if (n == NULL)
return NULL;
while (n->
next)
n = n->
next;
return (n->
next = newNode(data));
}//Add child Node to a Node
Node *addChild(Node * n, int data)
{
if (n == NULL)
return NULL;
//Check if child list is not empty.
if (n->
child)
return addSibling(n->
child, data);
else
return (n->
child = newNode(data));
}//Traverses tree in depth first order
void traverseTree(Node * root)
{
if (root == NULL)
return ;
while (root)
{
cout <
<" " <
<
root->
data;
if (root->
child)
traverseTree(root->
child);
root = root->
next;
}
}//Driver codeint main()
{
/*Let us create below tree
*10
*/ /\\
*2345
*|/| \
*6789*///Left child right sibling
/*10
*|
*2 ->
3 ->
4 ->
5
*||
*67 ->
8 ->
9*/
Node *root = newNode(10);
Node *n1= addChild(root, 2);
Node *n2= addChild(root, 3);
Node *n3= addChild(root, 4);
Node *n4= addChild(n3, 6);
Node *n5= addChild(root, 5);
Node *n6= addChild(n5, 7);
Node *n7= addChild(n5, 8);
Node *n8= addChild(n5, 9);
traverseTree(root);
return 0;
}
Java
//CPP program to create a tree with left child
//right sibling representation. class GFG {static class NodeTemp
{
int data;
NodeTemp next, child;
public NodeTemp( int data)
{
this .data = https://www.lsbin.com/data;
next = child = null ;
}
}//Adds a sibling to a list with starting with n
static public NodeTemp addSibling(NodeTemp node, int data)
{
if (node == null )
return null ;
while (node.next != null )
node = node.next;
return (node.next = new NodeTemp(data));
}//Add child Node to a Node
static public NodeTemp addChild(NodeTemp node, int data)
{
if (node == null )
return null ;
//Check if child is not empty.
if (node.child != null )
return (addSibling(node.child, data));
else
return (node.child = new NodeTemp(data));
}//Traverses tree in depth first order
static public void traverseTree(NodeTemp root)
{
if (root == null )
return ;
while (root != null )
{
System.out.print(root.data +" " );
if (root.child != null )
traverseTree(root.child);
root = root.next;
}
}//Driver code
public static void main(String args[])
{/*Let us create below tree
*10
*/ /\\
*2345
*|/| \
*6789*///Left child right sibling
/*10
*|
*2 ->
3 ->
4 ->
5
*||
*67 ->
8 ->
9*/NodeTemp root = new NodeTemp( 10 );
NodeTemp n1 = addChild(root, 2 );
NodeTemp n2 = addChild(root, 3 );
NodeTemp n3 = addChild(root, 4 );
NodeTemp n4 = addChild(n3, 6 );
NodeTemp n5 = addChild(root, 5 );
NodeTemp n6 = addChild(n5, 7 );
NodeTemp n7 = addChild(n5, 8 );
NodeTemp n8 = addChild(n5, 9 );
traverseTree(root);
}
}//This code is contributed by M.V.S.Surya Teja.
Python3
# Python3 program to create a tree with
# left child right sibling representation. # Creating new Node
class newNode:
def __init__( self , data):
self . Next = self .child = None
self .data = https://www.lsbin.com/data# Adds a sibling to a list with
# starting with n
def addSibling(n, data):
if (n = = None ):
return Nonewhile (n. Next ):
n = n. Next
n. Next = newNode(data)
return n. Next# Add child Node to a Node
def addChild(n, data):
if (n = = None ):
return None# Check if child list is not empty.
if (n.child):
return addSibling(n.child, data)
else :
n.child = newNode(data)
return n.child# Traverses tree in depth first order
def traverseTree(root):
if (root = = None ):
returnwhile (root):
print (root.data, end =" " )
if (root.child):
traverseTree(root.child)
root = root. Next# Driver code
if __name__ = = '__main__' :# Let us create below tree
#10
#//\ \
# 2 34 5
#| /| \
#6 7 8 9 # Left child right sibling
# 10
# |
# 2 ->
3 ->
4 ->
5
#| |
#6 7 ->
8 ->
9
root = newNode( 10 )
n1 = addChild(root, 2 )
n2 = addChild(root, 3 )
n3 = addChild(root, 4 )
n4 = addChild(n3, 6 )
n5 = addChild(root, 5 )
n6 = addChild(n5, 7 )
n7 = addChild(n5, 8 )
n8 = addChild(n5, 9 )
traverseTree(root)# This code is contributed by pranchalK
C#
//C# program to create a tree with left
//child right sibling representation.
using System;
class GFG
{
public class NodeTemp
{
public int data;
public NodeTemp next, child;
public NodeTemp( int data)
{
this .data = https://www.lsbin.com/data;
next = child = null ;
}
}//Adds a sibling to a list with
//starting with n
public static NodeTemp addSibling(NodeTemp node, int data)
{
if (node == null )
{
return null ;
}
while (node.next != null )
{
node = node.next;
}
return (node.next = new NodeTemp(data));
}//Add child Node to a Node
public static NodeTemp addChild(NodeTemp node, int data)
{
if (node == null )
{
return null ;
}//Check if child is not empty.
if (node.child != null )
{
return (addSibling(node.child, data));
}
else
{
return (node.child = new NodeTemp(data));
}
}//Traverses tree in depth first order
public static void traverseTree(NodeTemp root)
{
if (root == null )
{
return ;
}
while (root != null )
{
Console.Write(root.data +" " );
if (root.child != null )
{
traverseTree(root.child);
}
root = root.next;
}
}//Driver code
public static void Main( string [] args)
{/* Let us create below tree
*10
*//\ \
* 2 34 5
*| /| \
*6 7 8 9 *///Left child right sibling
/* 10
* |
* 2 ->
3 ->
4 ->
5
*| |
*6 7 ->
8 ->
9 */NodeTemp root = new NodeTemp(10);
NodeTemp n1 = addChild(root, 2);
NodeTemp n2 = addChild(root, 3);
NodeTemp n3 = addChild(root, 4);
NodeTemp n4 = addChild(n3, 6);
NodeTemp n5 = addChild(root, 5);
NodeTemp n6 = addChild(n5, 7);
NodeTemp n7 = addChild(n5, 8);
NodeTemp n8 = addChild(n5, 9);
traverseTree(root);
}
}//This code is contributed by Shrikant13
输出如下:
10 2 3 4 6 5 7 8 9
级别顺序遍历:上面的代码讨论了深度优先遍历。我们还可以进行此类表示的级别顺序遍历。
C ++
//CPP program to create a tree with left child
//right sibling representation.
#include <
bits/stdc++.h>
using namespace std;
struct Node {
int data;
struct Node* next;
struct Node* child;
};
//Creating new Node
Node* newNode( int data)
{
Node* newNode = new Node;
newNode->
next = newNode->
child = NULL;
newNode->
data = https://www.lsbin.com/data;
return newNode;
}//Adds a sibling to a list with starting with n
Node* addSibling(Node* n, int data)
{
if (n == NULL)
return NULL;
while (n->
next)
n = n->
next;
return (n->
next = newNode(data));
}//Add child Node to a Node
Node* addChild(Node* n, int data)
{
if (n == NULL)
return NULL;
//Check if child list is not empty.
if (n->
child)
return addSibling(n->
child, data);
else
return (n->
child = newNode(data));
}//Traverses tree in level order
void traverseTree(Node* root)
{
//Corner cases
if (root == NULL)
return ;
cout <
<
root->
data <
<" " ;
if (root->
child == NULL)
return ;
//Create a queue and enque root
queue<
Node*>
q;
Node* curr = root->
child;
q.push(curr);
while (!q.empty()) {//Take out an item from the queue
curr = q.front();
q.pop();
//Print next level of taken out item and enque
//next level's children
while (curr != NULL) {
cout <
<
curr->
data <
<
" " ;
if (curr->
child != NULL) {
q.push(curr->
child);
}
curr = curr->
next;
}
}
}//Driver code
int main()
{
Node* root = newNode(10);
Node* n1 = addChild(root, 2);
Node* n2 = addChild(root, 3);
Node* n3 = addChild(root, 4);
Node* n4 = addChild(n3, 6);
Node* n5 = addChild(root, 5);
Node* n6 = addChild(n5, 7);
Node* n7 = addChild(n5, 8);
Node* n8 = addChild(n5, 9);
traverseTree(root);
return 0;
}
输出如下:
10 2 3 4 5 6 7 8 9
本文作者:萨基·提瓦里。如果你喜欢lsbin(我们知道你愿意!)并且想贡献力量, 你还可以使用功臣网或将你的文章邮寄至tribution@lsbin.org。查看你的文章出现在lsbin主页上, 并帮助其他Geeks。
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
推荐阅读
- 使用Tkinter创建多重选择
- 创建WYSIWYG文档编辑器|自然语言编程
- 用Python创建你的第一个应用程序
- 一个创意的C++程序,用于缩放整数
- 处理中的创意编程|S2(洛伦茨吸引子)
- 处理中的创意编程|S1(Random Walker)
- 瑞士信贷面试经历|实习校园(浦那)
- cristian算法介绍和实现详细介绍
- 使用物联网的作物监控和智能农业