二叉树的创建和遍历
案例:二叉树的层序遍历
class Program
{
public delegate void del();
static void Main(string[] args)
{
Solution sol = new Solution();
//一维数组
string temp = Console.ReadLine();
string[] str = temp.Split(',');
int[] arr = new int[str.Length];
for (int i = 0; i < arr.Length; i++)
{
if (str[i]=="null")
{
arr[i] = 0;
continue;
}
arr[i] = Convert.ToInt32(str[i]);
}
TreeNode root = new TreeNode();
List<TreeNode> content = new List<TreeNode>();
for (int i = 0; i < arr.Length; i++)
{
if (i==0)
{
root.val = arr[i];
content.Add(root);
}
else
{
TreeNode t = new TreeNode(arr[i]);
if (content[0].left == null)
{
content[0].left = t;
content.Add(t);
}
else
{
content[0].right = t;
content.RemoveAt(0);
content.Add(t);
}
}
}
IList<IList<int>> li = sol.LevelOrder(root);
foreach (var items in li)
{
foreach (var item in items)
{
Console.Write(item);
}
Console.WriteLine();
}
}
}
//树
public class TreeNode
{
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int val = 0, TreeNode left = null, TreeNode right = null)
{
this.val = val;
this.left = left;
this.right = right;
}
}
public class Solution
{
public IList<IList<int>> LevelOrder(TreeNode root)
{
//ou(root);
IList<IList<int>> ans = new List<IList<int>>();
if (root==null)
{
return ans;
}
Queue<TreeNode> que = new Queue<TreeNode>();
que.Enqueue(root);
while (que.Count>0)
{
List<int> temp = new List<int>();
int count =que.Count;
for (int i = 0; i < count; i++)
{
TreeNode t = que.Dequeue();
temp.Add(t.val);
if (t.left!=null)
{
que.Enqueue(t.left);
}
if (t.right!=null)
{
que.Enqueue(t.right);
}
}
ans.Add(temp);
}
return ans;
}
public void ou(TreeNode t)
{
Console.Write(t.val);
if (t.left!=null)
{
ou(t.left);
}
if (t.right!=null)
{
ou(t.right);
}
}
}
链表的创建
案例:删除链表第n个节点
public class ListNode {
public int val;
public ListNode next;
public ListNode(int val=0, ListNode next=null) {
this.val = val;
this.next = next;
}
}